Ответ
Протокол WebSocket работает поверх TCP (Transmission Control Protocol). Однако для установления соединения (handshake) он использует HTTP.
Этот процесс позволяет WebSocket "маскироваться" под обычный веб-трафик и проходить через стандартные порты (80, 443), что упрощает работу с файрволами.
Процесс установления соединения:
- HTTP Upgrade Request: Клиент отправляет стандартный HTTP-запрос, но с особыми заголовками
Upgrade: websocket
иConnection: Upgrade
. - Server Response: Сервер, если он поддерживает WebSocket, отвечает кодом
101 Switching Protocols
. - Connection Established: После этого HTTP-соединение "обновляется" до постоянного двунаправленного WebSocket-соединения, которое работает уже напрямую поверх TCP, обеспечивая быструю передачу данных с низкими задержками.
Пример Handshake:
# 1. Запрос от клиента
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
# 2. Ответ от сервера
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
# 3. Далее обмен данными идет по протоколу WebSocket поверх TCP