websocket握手成功會返回一個幹什麼狀態嗎?是200嗎?

王铁柱6發表於2024-12-07

WebSocket 握手成功不會返回 200 狀態碼。HTTP 200 狀態碼錶示的是一個成功的 HTTP 請求。而 WebSocket 握手本身是一個 HTTP 請求,但其目的是為了升級協議到 WebSocket。

成功建立 WebSocket 連線時,伺服器返回的 HTTP 狀態碼是 101 Switching Protocols。 客戶端收到這個狀態碼後,就知道伺服器同意升級協議,後續的通訊將不再使用 HTTP,而是使用 WebSocket 協議。

客戶端發起 WebSocket 連線的請求頭中包含 Upgrade: websocketConnection: Upgrade 這兩個欄位,伺服器同意升級協議後,會在響應頭中也包含這兩個欄位,以及 Sec-WebSocket-Accept 欄位 (根據客戶端請求頭中的 Sec-WebSocket-Key 計算得出)。

簡而言之:

  • 請求: 客戶端傳送一個 HTTP 請求,包含 Upgrade: websocketConnection: Upgrade
  • 成功響應: 伺服器返回 101 Switching Protocols,也包含 Upgrade: websocketConnection: Upgrade,以及 Sec-WebSocket-Accept
  • 失敗響應: 如果握手失敗,伺服器會返回其他的 HTTP 狀態碼,例如 400, 401, 403, 500 等,表示連線未能建立。

所以,看到 101 狀態碼,就代表 WebSocket 握手成功了。

相關文章