Как работает формат соединения WebSocket? протокол для двунаправленного обмена данными поверх TCP соединение начинается с HTTP/HTTPS рукопожатия (handshake) клиент отправляет HTTP-запрос с заголовком Upgrade: websocket сервер подтверждает переключение ответом 101 Switching Protocols после handshake создаётся полнодуплексное соединение данные передаются в виде фреймов, поддерживающих текстовый и бинарный форматы протокол обеспечивает малую задержку и обмен без постоянного создания запросов применяется в чатах, играх и системах live-обновлений, которым нужны реактивность и постоянное соединение
Как устроено WebSocket-соединение и обмен данными по этому протоколу?
Как работает формат соединения WebSocket? протокол для двунаправленного обмена данными поверх TCP соединение начинается с HTTP/HTTPS рукопожатия (handshake) клиент отправляет HTTP-запрос с заголовком Upgrade:…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как работает формат соединения 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.