HTTPの「1xx」ステータスコード:サーバーからの「ちょっと待ってて!」を読み解こう
こんにちは!ネットワークの世界に飛び込んだばかりのみなさん、ようこそ。
ブラウザでWebサイトを見ているとき、背後では「リクエスト(お願い)」と「レスポンス(お返事)」が光の速さで飛び交っています。普段は「200 OK(成功)」や「404 Not Found(見つからない)」くらいしか目にしませんが、実は数字の先頭が「1」で始まる、ちょっと特殊なステータスコードが存在することをご存知でしょうか?
今回は、この「1xx(インフォメーショナルレスポンス)」という、「本番のお返事をする前の、サーバーからの中間報告」に焦点を当てて、その役割と動きを紐解いていきましょう。
—
そもそも「1xx」って何のためにあるの?
郵便配達に例えてみましょう。あなたが巨大な荷物を送ろうとしているとします。
1. あなた:「これ、めちゃくちゃ重い荷物だけど受け取れる?」
2. 郵便局員:「中身をチェックしますね。まずは重さを量りますので、ちょっとその場で待っていてください。」
3. 郵便局員:「よし、受け取りOKです!送りますね。」
この「ちょっと待っていてください」という中継地点のやり取りこそが、1xxステータスコードの役割です。いきなり「送るか送らないか」を決定するのではなく、「あなたのリクエストは届いたよ、今処理中だよ」とクライアント(ブラウザなど)に伝えるための、優しさあふれる信号なのです。
—
代表的な1xxステータスコードを見てみよう
現場でよく遭遇する(あるいは裏側で動いている)代表的な2つを紹介します。
1. 「100 Continue」:長い手紙の「続きを書いてもいい?」
大きなファイルをアップロードするとき、サーバー側が「そもそも、このファイルを受け取れる状態か?」を事前に確認したい場合があります。
- クライアント:「これから1GBのファイルを送るけど、いいかな?」
- サーバー(100 Continue):「OK、準備はできているよ。続きのデータを送ってくれ!」
これがあるおかげで、もしサーバーが受け取れない状態なら、クライアントはわざわざ大きなファイルをアップロードせずに済むのです。通信の無駄を省くための賢い仕組みですね。
2. 「101 Switching Protocols」:会話の言語を変える合図
最近のWeb通信では、普通のHTTPから、よりリアルタイム性の高い「WebSocket」というプロトコルに切り替えることがよくあります。
- クライアント:「ねえ、普通のHTTPじゃなくてWebSocketで話さない?」
- サーバー(101 Switching Protocols):「わかった。じゃあ今の接続を使って、言葉(プロトコル)を切り替えるよ!」
この「合意」が取れた瞬間に、サーバーとクライアントはより高速な通信モードへ移行します。
—
クライアント側の「挙動」を理解する
さて、ここからがエンジニアとしての腕の見せ所です。ブラウザやプログラムは、1xxを受け取ったとき、どう振る舞うべきでしょうか?
実は、HTTPのルールでは「1xxを受け取っても、クライアントはそこで通信を終えてはいけない」と決められています。1xxはあくまで「中間報告」。クライアントは、「最終的な2xx(成功)や4xx(失敗)が来るまで、静かに待機し続ける」のが正解です。
サンプルコード:Pythonで「100 Continue」をシミュレートする
もしあなたがバックエンド開発者なら、こんな風にリクエストをハンドリングします。
疑似的なリクエストハンドラのイメージ
def handle_request(request):
# クライアントが「Expect: 100-continue」を送ってきた場合
if request.headers.get(“Expect”) == “100-continue”:
# サーバー側から「送ってきていいよ」と中間レスポンスを返す
send_response(100)
# 本番の処理を行う
data = receive_large_file(request)
# 最後に成功のお返事(200 OK)を返す
return 200, “アップロード完了!”
—
まとめ:ネットワークの「行間」を読む力
1xxステータスコードは、人間同士の会話でいう「相槌」や「確認」のようなものです。「通信」というと冷たい機械のやり取りに見えますが、実はこうして丁寧な「やり取りの確認」が積み重なって、快適なWeb体験が作られています。
- 100 Continue は「準備完了、送っていいよ!」というゴーサイン。
- 101 Switching Protocols は「もっと良い方法で話そう」という提案。
これからは、ブラウザの開発者ツール(F12キー)を開いて、ネットワークタブを覗いてみてください。一瞬だけ光るこれらのコードを見つけられたら、あなたももうネットワークのプロへの第一歩を踏み出したと言えるでしょう!
もし、通信が途中で止まってしまうトラブルに遭遇したら、まずは「途中で1xxのやり取りが上手くいっていないのではないか?」と疑ってみる。そんな深い視点を持つだけで、デバッグのスピードが劇的に変わりますよ。
それでは、また次回の深掘りでお会いしましょう!
コメント