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 節

瀏覽器相容性

另見