Sec-WebSocket-Key

Sec-WebSocket-Key HTTP 请求头 用于 WebSocket 打开 握手 以允许客户端(用户代理)确认它“确实希望”请求将 HTTP 客户端升级为 WebSocket。

密钥的值是使用 WebSocket 规范中定义的算法计算的,因此这 *不提供安全性*。 相反,它有助于防止非 WebSocket 客户端无意中或因误用而请求 WebSocket 连接。

此标头在脚本打开 WebSocket 时由用户代理自动添加;它不能使用 fetch()XMLHttpRequest.setRequestHeader() 方法添加。

服务器的 Sec-WebSocket-Accept 响应头应包含根据指定的密钥值计算的值。 然后,用户代理可以在确认连接之前验证此值。

标头类型 请求头
禁止的标头名称

语法

http
Sec-WebSocket-Key: <key>

指令

<key>

此升级请求的密钥。 这是一个随机选择的 16 字节 nonce,已进行 Base64 编码和同构编码。 用户代理在启动 WebSocket 连接时添加此密钥。

示例

客户端将使用类似于以下内容的请求启动 WebSocket 握手。 请注意,这首先是 HTTP GET 请求(HTTP/1.1 或更高版本),除了 Sec-WebSocket-Key 之外,请求还包含 Upgrade 标头,指示从 HTTP 升级到 Web 套接字的意图。

http
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 标头计算的值,并确认将连接升级到 Web 套接字的意图

http
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

规范

规范
未知规范
# 第 11.3.1 节

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅