サーバーはクライアントが要求したプロトコルに切り替えます。
使いどころ
接続を 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/