Безопасный HTTPS-запрос не выполняется в 90 % случаев.
Я использую NodeMCU, подключенный к корпоративной сети в школе. Информация, предоставленная в запросах GET, которые отправляет ESP8266, является конфиденциальной, поэтому, естественно, мы хотим сделать ее безопасной и зашифрованной — введите SSL. Делаем запрос так;
HTTPClient http.begin(url, thumbprint)
Однако в сети в школе этот запрос не выполняется в 90 % случаев, поэтому я провел несколько тестов — 100 запросов к одному и тому же IP-адресу и сертификату, отметив, сколько из них было выполнено;
- Школьная сеть
- HTTPS запросы: 10 из 100 успешных [10%]
- HTTP-запросы: 100/100 успешных [100%]
- Частная домашняя сеть
- HTTPS запросы: 100/100 успешных [100%]
- HTTP-запросы: 100/100 успешных [100%]
Мы также попытались использовать класс WiFiClient
, и хотя 100 % запросов прошли, каждый из них занимал 15 секунд, что слишком долго.
Мой вопрос: в чем может быть проблема, и что мы можем сделать, чтобы исправить это? Могу ли я что-то сделать в коде или в сети?
@Albert MN., 👍1
Обсуждение1 ответ
Лучший ответ:
Увеличьте время ожидания для вашего запроса с помощью HTTPClient.setTimeout()
. Обратите внимание, что время ожидания указано в миллисекундах.
HTTPClient http;
http.setTimeout(15000); // 15 секунд
http.begin(url, thumbprint);
- Обнаружение ESP8266 в сети
- ESP8266 Одноранговая сеть с AP и STA — кэширование клиентов AP, очистка их запросов?
- Подключение NodeMCU через Интернет
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
Вы получаете сообщения об ошибках?, @Gerben
@Gerben Нет ошибок стека, ответ ничего не содержит, а код HTTP - -11., @Albert MN.
Ваша школа, вероятно, использует прокси-сервер, который пытается отфильтровать фишинговые сайты или что-то в этом роде. Возможно, он работает быстро только для доменов из белого списка., @Dmitry Grigoryev
Я спросил об этом, и мне сказали, что ничто не блокирует мой сайт. Опять же, это работает в 10% случаев. Сказали, что брандмауэра нет..., @Albert MN.
Вы пытались увеличить время ожидания (HTTPClient.setTimeout), пока не добьетесь 100% успеха?, @Craig
@Крейг не думал об этом! Запросы на самом деле выполняются в 100% случаев (только сейчас с тайм-аутом 100000), так что это здорово! Хотя каждый запрос занимает около 4,5 секунд по сравнению с 300 мс, которые занимают незащищенные запросы. Но я возьму! Опубликуйте это как ответ, и я приму его., @Albert MN.
Что касается того, почему существует разница между двумя сетями, я не уверен. Я бы поднял уровень журнала на вашем сервере и посмотрел, указывает ли это на проблему., @Craig
вам следует рассмотреть ESP32, если вам нужно делать быстрые HTTPS-запросы от MCU, @dandavis