Sec-WebSocket-Key 头
HTTP Sec-WebSocket-Key 请求头用于 WebSocket 开启握手,以允许客户端(用户代理)确认它“确实想要”请求将 HTTP 客户端升级为 WebSocket。
密钥的值是使用 WebSocket 规范中定义的算法计算的,因此这不提供安全性。相反,它有助于防止非 WebSocket 客户端无意中或通过滥用请求 WebSocket 连接。
当脚本打开 WebSocket 时,用户代理会自动添加此头;不能使用 fetch()
或 XMLHttpRequest.setRequestHeader()
方法添加此头。
服务器的 Sec-WebSocket-Accept
响应头应包含根据指定密钥值计算的值。然后用户代理可以在确认连接之前验证此值。
语法
http
Sec-WebSocket-Key: <key>
指令
<key>
-
此升级请求的密钥。这是一个随机选择的 16 字节 nonce,已进行 base64 编码和同构编码。用户代理在发起 WebSocket 连接时会添加此密钥。
示例
WebSocket 开启握手
客户端将发起一个 WebSocket 握手,请求示例如下。请注意,这首先是一个 HTTP GET
请求(HTTP/1.1 或更高版本),除了 Sec-WebSocket-Key
之外,请求还包含 Upgrade
头,表示打算从 HTTP 升级到 WebSocket 连接。
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
头计算得出的,并确认打算将连接升级为 WebSocket 连接
http
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
规范
规范 |
---|
WebSocket 协议 # section-11.3.1 |
浏览器兼容性
加载中…