Какой порт по умолчанию используется для HTTP/HTTPS GET-запросов?
Что проверяют
Базу сетей, но вопрос с подвохом: порт не зависит от метода. Интервьюер хочет услышать, что GET, POST и любой другой запрос идут на один и тот же порт, который задаёт схема URL. Следом обычно спрашивают, как тестировать сервис на нестандартном порту и что происходит при переходе с HTTP на HTTPS.
Как отвечать
Сначала короткий ответ: http:// по умолчанию идёт на порт 80, https:// на 443, метод запроса на это не влияет. Затем детали, полезные тестировщику:
- явный порт в URL:
https://api.example.com:8443/перебивает значение по умолчанию. Тестовые стенды часто живут на 8080, 3000 или 8443, это обычная практика; - HTTPS это HTTP поверх TLS: путь, параметры, заголовки и тело шифруются, открытыми остаются IP-адрес, порт и имя хоста в SNI;
- HTTP/3: работает поверх QUIC, то есть по UDP, как правило на тот же 443. Сервер объявляет его заголовком
Alt-Svc, поэтому при проверке сетевых правил нужен открытый UDP 443; - редирект: сервер на 80 обычно отвечает
301или308на HTTPS-адрес, а заголовокStrict-Transport-Securityвелит браузеру дальше сразу ходить по HTTPS; - браузер: Chrome и другие современные браузеры при вводе адреса без схемы сначала пробуют HTTPS, так что утверждение «без протокола всегда HTTP» устарело.
Для проверки подойдут curl -v, где видно, к какому адресу и порту идёт соединение, вкладка Network в DevTools и Postman.
Где спотыкаются
Связывают порт с методом и начинают рассуждать, что POST отправляется куда-то иначе, чем GET.
Думают, что HTTPS прячет всё, включая домен. На практике имя хоста видно в SNI, если не используется ECH, а IP-адрес виден всегда.
Забывают про редиректы при тестировании API: шлют запрос на http://, получают 301, а многие клиенты на 301 и 302 меняют POST на GET и теряют тело. Метод и тело сохраняют только 307 и 308.