101 Switching Protocols

サーバーはクライアントが要求したプロトコルに切り替えます。

使いどころ

接続を WebSocket にアップグレードする場合。

知っておきたいこと

101 はほぼ必ず WebSocket のハンドシェイク中に目にします。クライアントが Upgrade: websocket と Connection: Upgrade を送り、サーバーが Sec-WebSocket-Accept を付けて 101 で応答します。代わりに 200、400、426 が返ってくる場合は、間にある何かが Upgrade 関連のヘッダーを落としています。nginx の背後では、proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade、proxy_set_header Connection upgrade で明示的に転送する必要があります。

切り替え後は、アイドルタイムアウトが次の問題になります。nginx はプロキシした接続を proxy_read_timeout(デフォルトで 60 秒)経過後に閉じ、AWS ALB にも 60 秒のアイドルタイムアウトがあるため、通信のないソケットには ping が必要です。HTTP/2 は 101 をまったく使いません。HTTP/2 上の WebSocket は RFC 8441 の拡張 CONNECT を使います。101 にはボディがなく、キャッシュされることもありません。

情報 (1xx)

1xx は情報レスポンスです。サーバーはリクエストを受け取っており、やり取りが続きます。ブラウザーや HTTP ライブラリが自動で処理します。

レスポンスでの表示

HTTP/1.1 101 Switching Protocols

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く