Проверяет понимание механизма установления WebSocket-соединения через HTTP Upgrade и роли заголовков в этом процессе.
WebSocket — это протокол для постоянного двунаправленного обмена данными между клиентом и сервером. Но чтобы начать работать по нему, обе стороны должны сначала договориться о переключении протокола. Этот процесс и называется handshake. Он выполняется поверх обычного HTTP, что позволяет WebSocket легко проходить через прокси, брандмауэры и использовать существующую инфраструктуру.
Клиент отправляет HTTP GET-запрос с набором специальных заголовков. Сервер, если поддерживает WebSocket, отвечает статусом 101 Switching Protocols. С этого момента TCP-соединение больше не используется как HTTP — по нему начинают передаваться WebSocket-фреймы.
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Сервер формирует Sec-WebSocket-Accept, беря ключ клиента, добавляя к нему строку-магию 258EAFA5-E914-47DA-95CA-C5AB0DC85B11, считая SHA-1 и кодируя результат в base64. Клиент проверяет это значение, чтобы убедиться, что сервер действительно понимает WebSocket.
Handshake используется везде, где нужны real-time коммуникации: чаты, онлайн-игры, биржевые котировки, совместное редактирование документов, уведомления. В браузере это скрыто за конструктором new WebSocket(url), но на сервере (Node.js, Go, Python) handshake часто обрабатывается вручную или библиотекой.
Итог: handshake — это мост между HTTP и WebSocket, позволяющий безопасно и совместимо с инфраструктурой перейти к постоянному двунаправленному соединению. Понимание этого процесса важно при отладке соединений, настройке прокси и написании собственных серверов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию