Телефон Android не может получить страницу ESP8266WebServer, если Content-Length > 1460
Я загрузил следующий скетч в свой ESP8266:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);
String toServe;
void serveShortString() {
server.send(200, "text/plain", "short string!");
}
void serveLongString() {
server.send(200, "text/plain", toServe);
}
void setup() {
WiFi.softAP("test");
// заполните строку для обслуживания:
toServe.reserve(3000);
for(int i=0; i<150; i++) toServe += "1234567890123456789\n";
server.on("/long", serveLongString);
server.on("/short", serveShortString);
server.begin();
}
void loop() {
server.handleClient();
}
Он отправляет короткое сообщение на /short
и длинное сообщение (3000 символов) на /long
.
Страница /short
работает везде: Windows, Desktop Linux (Fedora) и Android.
С другой стороны, страница /long
работает только на Windows и большую часть времени на настольном Linux. Она никогда не работает на Android. Я пробовал два телефона.
Я захватил сетевой трафик на моем телефоне Android с помощью tPacketCapture. Вот результат:
При попытке получить /short
все работает нормально. При попытке получить /long
проходит только заголовок, но содержимое не приходит. Как я уже сказал, все работает нормально в Windows и (большую часть времени) в Desktop Linux. Есть идеи, что не так?
@Geier, 👍0
1 ответ
Лучший ответ:
Решение заключается в добавлении следующей строки в platformio.ini
:
build_flags = -D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
Я заметил, что тот же скетч работает без проблем при сборке с помощью Arduino IDE, поэтому я проверил различия при сборке с помощью platformio и Arduino IDE.
Оказывается, существенное различие заключается в том, что Arduino IDE по умолчанию использует lwIP 2, тогда как platformio использует 1.4, в котором, похоже, есть эта ошибка (та же ошибка возникает при использовании Arduino IDE с lwIP 1.4).
Приведенный выше флаг сборки сообщает platformio о необходимости использования lwIP v2.
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- ESP8266 Ошибка неверного запроса 400
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Проанализировать большой ответ json с помощью ESP8266
- ESP8266 не отвечает через случайные промежутки времени
- Код запроса ESP8266 GET -1
- Как подключить Arduino с модулем WiFi ESP8266-11 к 000webhost (бесплатный хостинг)