Sec-WebSocket-Extensions header

Baseline 已广泛支持

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

HTTP Sec-WebSocket-Extensions 请求头响应头用于 WebSocket 建立连接的握手过程中,以协商客户端和服务器使用的协议扩展。

在请求中,该头指定了一个或多个 Web 应用程序希望使用的扩展,按优先级排序。这些可以作为多个头添加,或者作为逗号分隔的值添加到单个头中。每个扩展还可以有一个或多个参数——这些参数是分号分隔的值,列在扩展之后。

在响应中,该头只能出现一次,它指定服务器从客户端偏好中选择的扩展。此值必须是服务器支持的、在请求头提供的列表中出现的第一个扩展。

请求头由浏览器根据其自身功能自动添加,不依赖于创建 WebSocket 时传递给构造函数的参数。

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

语法

http
Sec-WebSocket-Extensions: <extensions>

指令

<extensions>

一个逗号分隔的扩展列表,用于请求(或服务器同意支持)。这些通常选自 IANA WebSocket 扩展名称注册表(也可以使用自定义扩展)。带有参数的扩展用分号分隔参数。

示例

WebSocket 开启握手

下面的 HTTP 请求显示了初始握手过程,其中客户端支持 permessage-deflate 扩展(带有 client_max_window_bits 参数)和 bbf-usp-protocol 扩展。

http
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, bbf-usp-protocol

下面为每个扩展使用单独头部的请求是等效的

http
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Extensions: bbf-usp-protocol

以下响应可能由服务器发送,表示它将支持 permessage-deflate 扩展

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

规范

规范
WebSocket 协议
# 第 11.3.2 节

浏览器兼容性

另见