これは何のサイン?
101 は「あなたの要求通り、ここから先は別のプロトコルに切り替えます」というサーバーからの宣言です。 校庭で言えば、コーチがマイクを取り「ここまで体操の時間でしたが、次はリレーの練習に切り替えます」とアナウンスしてフォーメーションを変える——そんな切替の合図です。
クライアントが Upgrade ヘッダで「次は WebSocket で話そう」「HTTP/2 で続けよう」と提案し、サーバーが「了解、切り替えるよ」と応じたときに返ります。実用上、もっとも頻繁に見るのは WebSocket 開始時です。
校庭からのひとこと
校庭での朝練が終わり、コーチが「ここからリレー走に切り替えるよ。靴ひもを締め直してね」と声をかけると、生徒たちは次の動きの準備を始めます。同じ場所、同じ仲間でも、ここから先は違うルールで動く。
101 もそれと同じで、TCP のコネクションは保ったまま、その上で話す言葉 (プロトコル) だけを切り替えます。返ってくる側にとっては「合意しました、これから新しいルールで」という静かな宣言です。
受け止め方
次にあなたができること:
- 新しいプロトコルで通信を続行:101 が返ったら、Upgrade で指定したプロトコル (例: WebSocket) で送受信を始める
- クライアントライブラリを最新化:古いライブラリは Upgrade に正しく対応していないことがある
- 接続のフローを記録:WebSocket デバッグ時は 101 のレスポンスヘッダ全体を残す
- プロキシ越しの動作を確認 (管理者向け):CDN・LB が Upgrade ヘッダを透過させる設定になっているか
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 101 Switching Protocols
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>101 Switching Protocols</h1></body></html>