WebSocket 握手成功不會返回 200 狀態碼。HTTP 200 狀態碼錶示的是一個成功的 HTTP 請求。而 WebSocket 握手本身是一個 HTTP 請求,但其目的是為了升級協議到 WebSocket。
成功建立 WebSocket 連線時,伺服器返回的 HTTP 狀態碼是 101 Switching Protocols。 客戶端收到這個狀態碼後,就知道伺服器同意升級協議,後續的通訊將不再使用 HTTP,而是使用 WebSocket 協議。
客戶端發起 WebSocket 連線的請求頭中包含 Upgrade: websocket
和 Connection: Upgrade
這兩個欄位,伺服器同意升級協議後,會在響應頭中也包含這兩個欄位,以及 Sec-WebSocket-Accept
欄位 (根據客戶端請求頭中的 Sec-WebSocket-Key
計算得出)。
簡而言之:
- 請求: 客戶端傳送一個 HTTP 請求,包含
Upgrade: websocket
和Connection: Upgrade
。 - 成功響應: 伺服器返回
101 Switching Protocols
,也包含Upgrade: websocket
和Connection: Upgrade
,以及Sec-WebSocket-Accept
。 - 失敗響應: 如果握手失敗,伺服器會返回其他的 HTTP 狀態碼,例如 400, 401, 403, 500 等,表示連線未能建立。
所以,看到 101 狀態碼,就代表 WebSocket 握手成功了。