Sec-WebSocket-Accept 头

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

HTTP Sec-WebSocket-Accept 响应头用于 WebSocket 开启握手,表示服务器愿意升级到 WebSocket 连接。

此头在响应中最多只能出现一次,其指令值根据相应请求中发送的 Sec-WebSocket-Key 请求头计算。

头类型 响应头
禁止请求头 是 (Sec- 前缀)

语法

http
Sec-WebSocket-Accept: <hashed key>

指令

<hashed key>

如果提供了 Sec-WebSocket-Key 头,则此头的值的计算方法是:取键的值,连接字符串 258EAFA5-E914-47DA-95CA-C5AB0DC85B11,然后对连接后的字符串进行 SHA-1 哈希 — 得到一个 20 字节的值。然后将该值进行 base64 编码以获得此属性的值。

示例

WebSocket 开启握手

客户端将通过以下请求发起 WebSocket 握手。请注意,这最初是一个 HTTP GET 请求(HTTP/1.1 或更高版本),并包含 Upgrade 头,表示意图升级到 WebSocket 连接。它还包含 Sec-WebSocket-Key,用于计算 Sec-WebSocket-Accept,以确认将连接升级到 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 协议
# 第 11.3.3 节

浏览器兼容性

另见