EspAsyncWebServer обрабатывает HTTPS в HTTP

Я прочитал эту проблему. Но я этого не понимал. Как и у автора, у меня нет SSL-сертификата, и я не хочу его иметь (потому что, если бы он у меня был, я мог бы жить с HTTPS!).

Я просто хочу обработать любой запрос https://<url>, как если бы он был http://<url>. Это может быть перенаправление, но ответ гласит:

server.on("/redirect/internal", HTTP_GET, [](AsyncWebServerRequest *request){
  request->redirect("/hello");
});

server.on("/redirect/external", HTTP_GET, [](AsyncWebServerRequest *request){
  request->redirect("https://techtutorialsx.com/");
});

Хорошо, но как определить, был ли запрос HTTP или HTTPS?

, 👍0

Обсуждение

веб-браузер, вероятно, взбесится, если вы перенаправите его на незащищенную веб-страницу., @jsotola

http использует порт 80 ... https использует порт 443, @jsotola


1 ответ


2

Это не то, что вы можете сделать.

То, что вы просите, похоже на фразу "Мне нужно что-то скрутить, но я действительно хочу использовать только молоток, так как же мне забить винт?". Ответ: нет.

В данном случае ESP32 — это сервер. Веб-браузер является клиентом. Веб-браузер использует HTTPS. Когда браузер делает HTTPS-запрос к серверу, HTTPS — это единственное, что браузер может принять. HTTPS включает в себя уровень безопасности (это часть «S»), для которого требуются сертификаты. Если сервер не может работать с этим уровнем безопасности (а это не так, если у него нет SSL-сертификата), то единственное, что он может сделать, — это отклонить соединение, либо не прослушивая его, либо немедленно закрывая его

Связь между клиентом и сервером отсутствует, если сервер не настроен с использованием сертификатов и не может общаться с клиентом по протоколу TLS (уровень безопасности). Разрешить серверу снижать уровень безопасности, когда клиент запрашивает это, было бы огромной общей проблемой безопасности для Интернета. Он разработан, чтобы не допустить этого.

Либо поддерживайте HTTPS надлежащим образом, либо заставьте клиент говорить по HTTP, либо не делайте этого вообще. Это ваши варианты.

Что касается определения HTTP и HTTPS, это зависит от того, какой порт прослушивается вашим сервером. Если вы слушаете порт 80, вы получаете HTTP-запросы. Если вы слушаете порт 443, вы получаете HTTPS. Если вы не прослушиваете порт, запрос этого типа отклоняется (сбрасывается).

,

Хорошо понял. Я думал, что это проще, потому что я видел некоторые устройства IoT, которые делают это. Просто пояснение: это не приложение www, это просто страница конфигурации, размещенная на устройстве MCU. Здесь нет проблем с безопасностью. И TLS — это излишество для такой работы. К сожалению, если вы не укажете протокол, браузеры предполагают, что это HTTPS, и большинство пользователей недоумевают, почему страница не загружается..., @Mark