Веб-протоколы

Сетевое взаимодействие — стек протоколов, а не один HTTP:

flowchart TD
    A["HTTP semantics"] --> B["TLS — конфиденциальность и подлинность"]
    B --> C["TCP или QUIC — доставка потоков"]
    C --> D["IP — маршрутизация пакетов"]
    D --> E["Ethernet / Wi-Fi — локальная передача"]
    DNS["DNS — имя → адрес"] -. "до соединения" .-> D

Уровни помогают локализовать ошибку. 404 означает, что HTTP-сервер ответил; TCP timeout означает, что до HTTP дело могло не дойти.

HTTP

HTTP задаёт request/response semantics: method, target, headers, body и status. Он не обязан создавать новое TCP-соединение для каждого запроса: соединения повторно используются, а HTTP/2 и HTTP/3 мультиплексируют streams.

HTTPS и TLS

HTTPS — HTTP поверх TLS. TLS:

  • согласует криптографические параметры;
  • проверяет сертификат сервера и имя;
  • выводит ключи сессии;
  • защищает целостность и конфиденциальность данных.

TLS не делает доверенным само приложение: сервер всё ещё может авторизовать неверно или записать секрет в log.

DNS

DNS переводит имя в записи, например IPv4/IPv6, и использует кэш с TTL. Смена DNS не мгновенна: разные resolver ещё могут держать старый ответ. Успешный DNS lookup не гарантирует доступность порта.

WebSocket и Server-Sent Events

  • WebSocket даёт двунаправленный канал после handshake.
  • SSE передаёт поток событий от сервера к клиенту поверх HTTP.
  • Обычный polling проще, но создаёт лишние запросы и задержку.

Выбор зависит от направления данных, прокси, масштабирования соединений и требований к восстановлению.

Диагностическая лестница

getent hosts api.example.test
nc -vz api.example.test 443
curl -v --connect-timeout 3 "$DEMO_ENDPOINT/health"

В закрытой среде использую разрешённые инструменты и не публикую реальные адреса.

Типичные сбои

  • Искать REST-ошибку, когда имя не разрешается.
  • Перепутать connect timeout с read timeout.
  • Считать TLS certificate validation необязательной внутри сети.
  • Не учитывать proxy/load balancer и его timeout.
  • Держать тысячи WebSocket connections без heartbeat и backpressure.

Вопросы для собеседования

На каком уровне находится HTTP? На прикладном; ниже работает transport и IP.

Зачем DNS TTL? Ограничить время кэширования записи и нагрузку на resolver; он создаёт окно распространения изменений.

Что проверяет TLS certificate? Связь публичного ключа с удостоверенной identity и соответствие имени при доверенной цепочке.

Чем WebSocket отличается от SSE? WebSocket двунаправленный, SSE в основном server-to-client и остаётся моделью HTTP stream.

См. Принципы организации Интернет, Версии протокола HTTP, SSL.