意義
伺服器同意切換到用戶端在 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= 規範
常見問題
› 為什麼我的 WebSocket 回傳 400 而不是 101?
交握標頭缺失或遭到修改,常見原因是代理移除了 Upgrade/Connection,或 Sec-WebSocket-Key、版本無效。
› HTTP/2 會用到 101 嗎?
只有少見的明文 h2c 升級會用。瀏覽器透過 TLS ALPN 協商 HTTP/2,HTTP/2 本身沒有 101 回應。