TrueURL
TrueURL

メニュー

101 プロトコルの切り替え

サーバーがクライアントの Upgrade リクエストを受け入れ、この接続を別のプロトコルに切り替えたことを示します。実際にはほとんどが WebSocket です。

リーズンフレーズ
Switching Protocols
リダイレクト
いいえ
デフォルトでキャッシュ可能
いいえ

101 Switching Protocols は、サーバーがクライアントの Upgrade リクエストヘッダーを受け入れたことを示します。101 レスポンスの終わりを示す空行の直後から、この接続では双方が別のプロトコルで通信します。レスポンスには、新しいプロトコルを示す Upgrade ヘッダーが含まれていなければなりません。

現在の用途は、ほぼ WebSocket のハンドシェイクに限られます。ブラウザーは Upgrade: websocket、Connection: Upgrade、Sec-WebSocket-Key を付けた GET を送信し、サーバーは対応する Sec-WebSocket-Accept を付けて 101 を返します。それ以降は、双方が WebSocket のフレームをやり取りします。101 は、平文の HTTP/1.1 から HTTP/2 へ切り替える h2c アップグレードにも使われていましたが、この方式は現在では非推奨です。ブラウザーは代わりに、TLS ハンドシェイクの中で(ALPN により)HTTP/2 や HTTP/3 をネゴシエートします。

Upgrade の仕組みがあるのは HTTP/1.1 だけです。HTTP/2 と HTTP/3 では 101 が送られることはなく、これらのプロトコル上の WebSocket には拡張 CONNECT(RFC 8441 と RFC 9220)が使われます。

レスポンス例

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

SEO とリダイレクトチェック

通常のページリクエストの結果として 101 が返されることはありません。ブラウザーやクローラーが 101 を受け取るのは接続のアップグレードを明示的に要求した場合だけなので、インデックスには影響しません。リダイレクトチェッカーが送るのは通常の GET、HEAD、POST リクエストなので、101 が表示されることはありません。WebSocket のエンドポイントを通常の URL のようにチェックすると、たいていは 426 Upgrade Required や 400 Bad Request などの 4xx コードが返ります。

よくある原因と主な用途

  • ブラウザーが WebSocket を開き(new WebSocket('wss://...'))、サーバーがハンドシェイクを受け入れた場合。
  • クライアントが、平文の HTTP/2 に切り替える非推奨の h2c アップグレードを要求し、サーバーがそれに対応している場合。
  • リバースプロキシが Upgrade ヘッダーと Connection ヘッダーを転送しないため、プロキシ経由で WebSocket が失敗する場合。nginx では proxy_http_version 1.1 を設定し、両方のヘッダーをバックエンドに渡してください。

URL リダイレクトチェッカー

無料の TrueURL リダイレクトチェッカーで、URL が返すすべてのステータスコードをホップごとに確認できます。