Как устроено WebSocket-соединение и обмен данными по этому протоколу?

Как работает формат соединения WebSocket? протокол для двунаправленного обмена данными поверх TCP соединение начинается с HTTP/HTTPS рукопожатия (handshake) клиент отправляет HTTP-запрос с заголовком Upgrade:…

Короткий ответ

Что ответить на собеседовании

Как работает формат соединения WebSocket? протокол для двунаправленного обмена данными поверх TCP соединение начинается с HTTP/HTTPS рукопожатия (handshake) клиент отправляет HTTP-запрос с заголовком Upgrade: websocket сервер подтверждает переключение ответом 101 Switching Protocols после handshake создаётся полнодуплексное соединение данные передаются в виде фреймов, поддерживающих текстовый и бинарный форматы протокол обеспечивает малую задержку и обмен без постоянного создания запросов применяется в чатах, играх и системах live-обновлений, которым нужны реактивность и постоянное соединение

Подробный разбор

Ответ с пояснениями

Как работает формат соединения WebSocket?

  • протокол для двунаправленного обмена данными поверх TCP
  • соединение начинается с HTTP/HTTPS рукопожатия (handshake)
  • клиент отправляет HTTP-запрос с заголовком Upgrade: websocket
  • сервер подтверждает переключение ответом 101 Switching Protocols
  • после handshake создаётся полнодуплексное соединение
  • данные передаются в виде фреймов, поддерживающих текстовый и бинарный форматы
  • протокол обеспечивает малую задержку и обмен без постоянного создания запросов
  • применяется в чатах, играх и системах live-обновлений, которым нужны реактивность и постоянное соединение

Подробный ответ

Основной ответ

WebSocket — сетевой протокол, создающий двунаправленный полнодуплексный канал между клиентом и сервером поверх одного TCP-соединения. После его установки обе стороны могут обмениваться данными в реальном времени без регулярного открытия новых HTTP-запросов, необходимого при традиционной модели.

Ключевые моменты

  • Сначала выполняется HTTP-запрос на улучшение (upgrade request): клиент передаёт заголовок Upgrade: websocket. Если сервер поддерживает WebSocket, он отправляет подтверждение и переключает то же TCP-соединение на WebSocket-протокол.
  • После handshake данные передаются фреймами. Они бывают текстовыми, бинарными и контрольными, например ping/pong. Формат определён RFC 6455; каждый фрейм содержит заголовок с информацией о длине и маскировании.
  • Для безопасности и снижения риска злоупотреблений клиент обязан маскировать отправляемые данные по правилам протокола, тогда как сервер этого не делает. Такая маскировка препятствует атакам типа псевдокода.
  • WebSocket поддерживает постоянный канал с низкой задержкой (~10-50ms в оптимальных условиях), что особенно важно для приложений реального времени: чатов, игр и финансовых тикеров.

Практический контекст

В проектах на React 18+ или Node.js WebSocket часто подключают через библиотеки ws или Socket.IO. Они добавляют автоматическое восстановление соединения и пользовательские события поверх базового протокола. На инфраструктурном уровне применяют балансировщики с поддержкой WebSocket, такие как Nginx и HAProxy, а для защиты — SSL/TLS.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку