DevToolPal
繁
1xx 資訊

101 Switching Protocols

切換協定

意義

伺服器同意切換到用戶端在 Upgrade 標頭中要求的協定,最常見的是 WebSocket。此回應之後,連線改用新協定溝通。

常見原因

  • WebSocket 交握成功
  • 用戶端要求升級到 h2c(明文 HTTP/2)
  • 接受了自訂協定升級

解決方法

用戶端或訪客

對 WebSocket 而言,101 就是成功。如果預期 101 卻收到 200 或 400,請確認 URL 指向 WebSocket 端點,且代理有轉送 Upgrade 與 Connection 標頭。

網站或 API 的維護者

在 nginx 或負載平衡器後方,要明確轉送 Upgrade 和 Connection(proxy_set_header Upgrade $http_upgrade; Connection "upgrade"),並為長時間連線調高閒置逾時。

回應範例

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

規範

RFC 9110 §15.2.2

常見問題

› 為什麼我的 WebSocket 回傳 400 而不是 101?

交握標頭缺失或遭到修改,常見原因是代理移除了 Upgrade/Connection,或 Sec-WebSocket-Key、版本無效。

› HTTP/2 會用到 101 嗎?

只有少見的明文 h2c 升級會用。瀏覽器透過 TLS ALPN 協商 HTTP/2,HTTP/2 本身沒有 101 回應。