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 が 101 ではなく 400 を返すのはなぜ?

ハンドシェイクのヘッダーが欠けているか改変されています。Upgrade/Connection を削除するプロキシや、無効な Sec-WebSocket-Key やバージョンがよくある原因です。

› HTTP/2 は 101 を使いますか?

まれな平文 h2c アップグレードだけです。ブラウザーは TLS の ALPN で HTTP/2 を交渉し、HTTP/2 自体には 101 レスポンスがありません。