Sec-WebSocket-Protocol 头

Baseline 已广泛支持

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

HTTP Sec-WebSocket-Protocol 请求头响应头用于 WebSocket 开启握手,以协商在通信中使用的子协议。这可以是一个广为人知的协议,例如 SOAP 或 WAMP,也可以是客户端和服务器理解的自定义协议。

在请求中,该头按偏好顺序指定一个或多个 WebSocke 子协议,web 应用程序希望使用这些协议。这些协议值可以作为多个头中的协议值添加,也可以作为逗号分隔的值添加到单个头中。

在响应中,它指定服务器选择的子协议。这必须是服务器从请求头提供的列表中支持的第一个子协议。

请求头由浏览器使用应用程序在 WebSocket()protocols 参数中指定的值自动添加和填充。服务器选择的子协议在 WebSocket.protocol 中提供给 web 应用程序。

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

语法

http
Sec-WebSocket-Protocol: <sub-protocols>

指令

<sub-protocols>

一个逗号分隔的子协议名称列表,按偏好顺序排列。子协议可以从 IANA WebSocket 子协议名称注册表中选择,也可以是客户端和服务器共同理解的自定义名称。

作为响应头,这是服务器选择的单个子协议。

示例

WebSocket 开启握手

子协议在原始 WebSocket 握手请求中指定。下面的请求显示客户端偏好 soap,但也支持 wamp

http
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Protocol: soap, wamp

以这种方式指定协议具有相同的效果。

http
Sec-WebSocket-Protocol: soap
Sec-WebSocket-Protocol: wamp

服务器的响应将包含 Sec-WebSocket-Protocol 头,选择它从客户端偏好列表中支持的第一个子协议。如下所示为 soap

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

规范

规范
WebSocket 协议
# section-11.3.4

浏览器兼容性

另见