Что такое порт в URL и для чего он нужен
Что проверяют
Понимаете ли вы, как запрос находит нужное приложение на сервере, и умеете ли применить это на стендах. Для тестировщика вопрос быстро становится практическим: почему localhost:3000 открывается, а localhost:8080 нет, и чем «connection refused» отличается от таймаута.
Как отвечать
Хост в URL указывает на машину, порт указывает на конкретную программу на ней. Структура адреса: схема://хост:порт/путь?запрос#фрагмент. Порт это число от 0 до 65535 на транспортном уровне TCP или UDP, и на одном IP-адресе веб-сервер, база и кэш слушают каждый свой порт.
Если порт не указан, браузер берёт стандартный для схемы: 80 для http и ws, 443 для https и wss. Поэтому https://example.com и https://example.com:443 это один и тот же адрес.
Полезно помнить: 22 SSH, 5432 PostgreSQL, 3306 MySQL, 6379 Redis, 9092 Kafka, 3000 и 5173 у дев-серверов фронтенда, 8080 у бэкендов. IANA делит диапазон на системные порты до 1023, зарегистрированные до 49151 и динамические выше.
Практика для QA:
- слушает ли порт:
nc -zv host 5432,curl -v http://host:8080/health, на своей машинеlsof -i :8080на macOS илиss -tlnpна Linux; - разбор ошибок: «connection refused» значит, что на порту никто не слушает или сервис упал, а таймаут обычно означает, что пакеты режет файрвол;
- Docker: в
-p 8080:80слева порт хоста, справа порт внутри контейнера. Путаница в этой паре частая причина ситуации «сервис поднят, но не открывается».
Где спотыкаются
Утверждают, что нестандартный порт повышает безопасность. Сканер находит открытый порт за секунды, защищают сервис аутентификация и файрвол, а не номер.
Забывают, что порт входит в origin. localhost:3000 и localhost:8080 для браузера разные источники, поэтому запросы фронтенда к API на соседнем порту упираются в CORS. А вот куки портом не разделяются, и сессия одного стенда может мешать другому на том же хосте.
Путают порт в URL с портом, который слушает приложение за балансировщиком. Снаружи запрос приходит на 443, nginx проксирует его во внутренний 8080, и в баг-репорте важно указать, какой из них вы проверяли.