Заголовки: Sec-WebSocket-Key
Заголовок Sec-WebSocket-Key
Базовая поддержка Широко доступно
Эта возможность хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
HTTP-заголовок Sec-WebSocket-Key — это заголовок запроса, который используется при рукопожатии для открытия WebSocket-соединения. Он позволяет клиенту (пользовательскому агенту) подтвердить, что он «действительно хочет», чтобы HTTP-клиент перешёл на WebSocket.
Значение ключа вычисляется с помощью алгоритма, определённого в спецификации WebSocket, поэтому оно не обеспечивает безопасность. Вместо этого оно помогает предотвратить запросы на установление WebSocket-соединения от клиентов, не использующих WebSocket, которые могут быть отправлены случайно или в результате неправильного использования.
Этот заголовок автоматически добавляется пользовательскими агентами при открытии WebSocket из скрипта; его нельзя добавить с помощью методов fetch() или XMLHttpRequest.setRequestHeader().
Заголовок ответа сервера Sec-WebSocket-Accept должен содержать значение, вычисленное на основе указанного значения ключа. Затем пользовательский агент может проверить его, прежде чем подтвердить соединение.
| Тип заголовка | Заголовок запроса |
|---|---|
| Запрещённый заголовок запроса | Да (префикс Sec-) |
Синтаксис
Sec-WebSocket-Key: <key>
Директивы
<key>-
Ключ для этого запроса на переключение протокола. Это случайно выбранное 16-байтовое значение nonce, закодированное в Base64 и изоморфно закодированное. Пользовательский агент добавляет его при установлении WebSocket-соединения.
Примеры
>Рукопожатие для открытия WebSocket-соединения
Клиент инициирует рукопожатие WebSocket с помощью запроса, подобного приведённому ниже. Обратите внимание, что он начинается как HTTP-запрос GET (HTTP/1.1 или более поздней версии). Помимо Sec-WebSocket-Key, запрос включает заголовок Upgrade, указывающий на намерение перейти с HTTP на WebSocket-соединение.
GET /chat HTTP/1.1 Host: example.com:8000 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13
Ответ сервера должен включать заголовок Sec-WebSocket-Accept со значением, вычисленным на основе заголовка Sec-WebSocket-Key в запросе. Он подтверждает намерение переключить соединение на WebSocket:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Спецификации
| Спецификация |
|---|
| Протокол WebSocket> # section-11.3.1> |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
Sec-WebSocket-Key |
16 | 12 | 11 | 15 | 6 | 18 | 14 | 14 | 6 | 1.0 | 4.4 | 6 |
См. также
Sec-WebSocket-AcceptSec-WebSocket-VersionSec-WebSocket-ProtocolSec-WebSocket-Extensions- Рукопожатие WebSocket в статье Написание серверов WebSocket
- Механизм переключения протокола HTTP
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Sec-WebSocket-Key