Sec-WebSocket-Key 頭

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

HTTP Sec-WebSocket-Key 請求頭用於 WebSocket 開啟握手,以允許客戶端(使用者代理)確認它“確實想要”請求將 HTTP 客戶端升級為 WebSocket。

金鑰的值是使用 WebSocket 規範中定義的演算法計算的,因此這不提供安全性。相反,它有助於防止非 WebSocket 客戶端無意中或透過濫用請求 WebSocket 連線。

當指令碼開啟 WebSocket 時,使用者代理會自動新增此頭;不能使用 fetch()XMLHttpRequest.setRequestHeader() 方法新增此頭。

伺服器的 Sec-WebSocket-Accept 響應頭應包含根據指定金鑰值計算的值。然後使用者代理可以在確認連線之前驗證此值。

頭型別 請求頭
禁止請求頭 是 (Sec- 字首)

語法

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

瀏覽器相容性

另見