Библиотека ESP8266: получено 2 запроса вместо 1
У меня возникла странная проблема со скетчем при использовании библиотеки WiFiEsp.h из https://github.com/bportaluri/WiFiEsp
Когда я отправляю 1 запрос на свой ESP8266 из браузера как http://192.168.0.25 , похоже, мой ESP8266 получает 2 запроса и запускается 2 раза. См. скетч здесь и последовательный терминал:
void loop()
{
// прослушиваем входящих клиентов
WiFiEspClient client = server.available();
if (client) {
Serial.println("New client");
// http-запрос заканчивается пустой строкой
boolean currentLineIsBlank = true;
while (client.connected())
{
if (client.available())
{
char c = client.read();
Serial.write(c);
// если вы дошли до конца строки (получили новую строку
// символ) и строка пуста, http-запрос завершился,
// чтобы вы могли отправить ответ
if (c == '\n' && currentLineIsBlank) {
Serial.println("Sending response");
// отправляем стандартный заголовок ответа http
// используем \r\n вместо множества операторов println для ускорения отправки данных
client.print(
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Connection: close\r\n" // соединение будет закрыто после завершения ответа
"\r\n");
client.print("<!DOCTYPE HTML>\r\n");
client.print("<html>\r\n");
client.print("Hello World!\r\n");
client.print("</html>\r\n");
break;
}
if (c == '\n') {
// вы начинаете новую строку
currentLineIsBlank = true;
}
else if (c != '\r') {
// вы получили символ в текущей строке
currentLineIsBlank = false;
}
}
}
// даем веб-браузеру время получить данные
delay(10);
// закрываем соединение:
client.stop();
Serial.println("Client disconnected");
}
}
Серийный терминал:
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 2.0.0
Attempting to connect to WPA SSID: Numericable-6010
[WiFiEsp] Connected to Numericable-6010
You're connected to the network
SSID: Numericable-6010
IP Address: 192.168.0.25
To see this page in action, open a browser to http://192.168.0.25.
[WiFiEsp] Server started on port 80
[WiFiEsp] New client 0
New client
GET / HTTP/1.1
Host: 192.168.0.25
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://192.168.0.25/
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Sending response
[WiFiEsp] Disconnecting 0
Client disconnected
[WiFiEsp] New client 1
New client
GET /favicon.ico HTTP/1.1
Host: 192.168.0.25
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://192.168.0.25/
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Sending response
[WiFiEsp] Disconnecting 1
Client disconnected
Пожалуйста, объясните, почему подключились 2 клиента? Как я могу отключиться сразу после первого?
@Teddol, 👍0
Обсуждение2 ответа
Лучший ответ:
Браузеры автоматически запрашивают /favicon.ico для сайтов. Добавьте это в раздел <head>
вашего HTML, чтобы исключить запрос «favicon»:
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
client.println("HTTP/1.1 200 OK\r\n" "Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><head>");
client.println("<link rel='icon' href='data:;base64,iVBORw0KGgo='>");
client.println("</head><body>");
client.println("Hello World!");
client.println("</body></html>");
на основе этого ответа SO вместо указания на сервер значок кодируется в параметре href как строка base64
Я изменил <ссылку>
на последнее изменение ответа SO., @Juraj
Добавление заголовка со ссылкой на значок ярлыка в html-ответ устраняет проблему. Спасибо!!!
client.print(
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Connection: close\r\n" // соединение будет закрыто после завершения ответа
"\r\n");
client.print("<!DOCTYPE HTML>\r\n");
client.print("<head>\r\n");
client.print("<link rel='shortcut icon' href='data:image/x-icon;,' type='image/x-icon'> \r\n");
client.print("</head>\r\n");
client.print("<html>\r\n");
client.print("Hello World!\r\n");
client.print("</html>\r\n");
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Загрузка кода Arduino, OTA, через подключенный ESP8266-12E с запущенным Esp-Link
- Проблема с WiFi на Mega + WiFi R3 ATmega2560 + ESP8266
- Последовательная связь arduino mega и D1 Wemos Mini
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Ошибка ESP8266 error: espcomm_upload_mem failed while uploading sketch
- Какой максимальный размер статического документа Json в Arduino JSON?
- Подключение ESP8266 и PN532
браузеры автоматически запрашивают
/favicon.ico
для сайтов, @Jurajhttps://stackoverflow.com/questions/1321878/how-to-prevent-favicon-ico-requests, @Juraj
Спасибо за информацию, но как мне закодировать запрос URL?, @Teddol
Не могли бы вы объяснить параметры href?, @Teddol
вместо указания на сервер значок кодируется в параметре href как строка base64., @Juraj