Веб-сервер ESP8266 отображает только текст, даже если тип контента — текст/HTML.
Итак, я только что получил по почте две платы разработки WiFi ESP8266/ESP-12E, поскольку пытаюсь настроить несколько устройств домашней автоматизации в своем доме. Я продвинулся намного дальше, чем думал сегодня, учитывая, что это мой первый опыт работы со схемами, использующими микропроцессоры/Wi-Fi, но я столкнулся с проблемой, которую не могу найти для себя решение. Простите, если есть другой вопрос, похожий на этот, но я не смог его найти, и мне кажется, это лучшее место, чтобы его задать.
Я использую программу-учебник/шаблон, которую любезно создал Руи Сантос из Random Nerd Tutorials ( https://randomnerdtutorials .com/esp8266-web-server/), и хотя у нас (насколько я могу судить) идентичные платы, операционные системы и код Arduino, я продолжаю получать HTML-страницу, состоящую только из текста, без каких-либо отображаются элементы CSS или HTML. Это должно выглядеть так:
Однако я получаю вот такую страницу:
Его последовательный монитор выдает такой ответ:
Мой последовательный монитор выдает такой ответ:
Я пробовал поместить client.println("Content-type:text/html");
в несколько мест, чтобы посмотреть, поможет ли это отобразить страницу, но безрезультатно. Будем очень признательны за любую помощь в запуске этой маленькой программы/веб-сайта.
Спасибо, что уделили время!
@Caleb Carroll, 👍0
Обсуждение2 ответа
Не используйте инструменты низкого уровня для обработки http, используйте встроенные инструменты http. Они упрощают создание HTTP-ответов. Больше не нужно объединять заголовки или беспокоиться о статусе клиента; он предоставляет красивую чистую функцию, например:server.send(404, "text/plain", message);
и удобный метод подписки: server.on()
.
Оцените его использование на одном из встроенных примеров Arduino ESP8266: https://github.com/esp8266/ESPWebServer/blob/master/examples/HelloServer/ HelloServer.ino
Использование HTTP здесь довольно простое, поэтому я думаю, что распечатка собственных HTTP-заголовков — это нормально, вам просто нужно очень точно определить порядок и отправлять именно то, что ожидает браузер. Не видя вашего кода, я предполагаю, что вы отправляете пустую строку клиенту где-то до отправки строки Content-type: text/html или что вы не печатаете пустую пустую строку где-то после Строка типа контента отправляется. Если ваш браузер (клиент) не получает команды протокола HTTP, которые он ожидает, в ожидаемом порядке, то по умолчанию он будет отображать ВСЕ, что вы отправляете, в виде обычного текста или HTML-документа. Чтобы проиллюстрировать, что именно должно быть отправлено в браузер в этом примере:
HTTP/1.1 200 OK
Content-type:text/html
Connection: close
<HTML>....
Обратите внимание, что после строки Connection: close и перед отправкой HTML должна быть напечатана пустая строка. Клиенту больше ничего не должно отправляться до отправки строки HTTP/1.1 200 OK и до запуска вашего HTML-кода. Если вы не будете следовать протоколу, ваш браузер, вероятно, по умолчанию будет отображать все в виде обычного текста, как вы видите.
В примере кода я заметил еще одну вещь: между Content-type: и text/html нет пробела. Это необычно, но я думаю, что это не нарушает протокол и Firefox и Chrome справляется с этим нормально в моем тестировании. Тем не менее, это может вызвать проблемы, если браузер не обрабатывает это должным образом, поэтому вы можете просто попробовать добавить пробел между заголовком и его значением.
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
- Создать один сервер в режиме точки доступа, а другой - в режиме станции.
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Веб-сервер ESP8266 не отвечает
- Ошибка при компиляции скетча для Arduino Uno (ld return 1)
- Wemos D1 mini зависает через несколько минут
очевидно, вы неправильно добавляете тип контента в код, которым вы не поделились, потому что, если вы добавили его правильно, он будет отправлен как **заголовок ответа**, как и ваш код, которого у вас нет. общий - это помещение
content-type:...etc
в **тело ответа**, но поскольку код, которым вы не поделились, не виден, я могу ошибаться (но это не так), @Jaromanda XЯ пробовал поместить client.println("Content-type:text/html");
как насчет того, чтобы оставить его там, где он есть в учебнике?, @Jaromanda XПрограмма не отображала страницу правильно как есть, поэтому я попробовал это, до сих пор у меня не было опыта работы с кодом, поэтому я решил попробовать. Как лучше всего показать вам код?, @Caleb Carroll
Ой. Значит, исходный код сломан?, @Jaromanda X
Возможно, существует проблема совместимости между кодом и моим esp8266 или моей ОС, но я ничего не могу точно определить. В комментариях к этой статье было много проблем, но также было много историй успеха, хотя ни одна проблема не отражала эту проблему., @Caleb Carroll