HTTPの「ちょっと待ってね!」を理解する。1xxステータスコードの舞台裏
こんにちは!ネットワークの世界へようこそ。
普段、私たちがブラウザでWebサイトを見たり、アプリでデータをやり取りしたりするとき、裏側では「HTTP」という共通の言葉で会話が行われています。この会話の中で、たまに遭遇するのが「1xx(ワンエックスエックス)」というステータスコード。
200(成功!)や404(見つからない!)は有名ですが、この100番台は少し特殊な「調整役」です。今回は、この影の功労者たちが、ネットワークの現場でどんな役割を果たしているのか、郵便配達に例えて紐解いていきましょう。
—
1xxは「本番前の打ち合わせ」
HTTPのステータスコードは、サーバーからクライアント(ブラウザなど)への「返事」です。1xx系のコードは、「まだ途中だよ、準備中だから待っててね」という中間報告の役割を持っています。
例えるなら、巨大な荷物を郵便局へ持ち込んだときを想像してください。
1. あなた(クライアント): 「このクソ重い荷物を送りたいんだけど、受け取ってくれる?」
2. 郵便局員(サーバー): 「中身を確認しますね。……よし、受け入れ準備はOKです。続きをどうぞ!」
3. あなた: 「じゃあ、荷物を渡します!」
この「続きをどうぞ!」という合図がないまま、いきなり重い荷物を突き出されたら、郵便局員も困ってしまいますよね。この「あ、今準備するから、ちょっと待ってて!」を伝えるのが1xxの正体なんです。
—
主役の「100 Continue」:無駄な通信を減らす知恵
一番よく使われるのが「100 Continue」です。これは「リクエストの続きを送っても大丈夫ですよ」という合図です。
例えば、数ギガバイトある巨大なファイルをアップロードするとしましょう。もし、サーバーが「容量オーバーだ」とか「認証エラーだ」という理由で受け取り拒否する予定なのに、クライアントが律儀に全データを送り続けてしまったら……回線も時間も大損ですよね。
そこで、クライアントはまず「これから送るけど、いい?」という小さな手紙(ヘッダーのみ)を先に送ります。
100 Continue の流れ
1. クライアント: 「これだけのサイズのデータを送る予定だけど、送っていい?」(ヘッダーのみ送信)
2. サーバー: 「OK、準備できたよ!」(100 Continue を返す)
3. クライアント: 「じゃあ、本番データを送るね!」(データ本体を送信)
このように、100 Continueは「失敗するかもしれない無駄な送信を未然に防ぐ」ための、ネットワークにとって非常に経済的で賢い仕組みなのです。
—
「101 Switching Protocols」:会話の言語を変える合図
もう一つ、知っておくべき重要なものが「101 Switching Protocols」です。
これは「今の通信方式(プロトコル)から、別の方式に切り替えましょう」という合図です。例えば、普通のWebページ閲覧(HTTP)から、リアルタイムな双方向通信(WebSocket)に切り替えるときによく使われます。
「日本語で話していたけれど、ここからは暗号のような専門用語で話そうか」と、会議のルールそのものを変更するようなイメージですね。
—
現場でどう動く?:開発者が意識すべきポイント
実際にプログラミングでこの挙動を扱う際、多くのライブラリは裏側で自動的に100 Continueを処理してくれます。しかし、トラブルシューティングの際にはここを意識する必要があります。
例えば、Node.jsでサーバーを立てる際、以下のようなイメージで「継続」の合図を扱います。
// HTTPサーバーの簡易的なイメージ
const http = require(‘http’);
const server = http.createServer((req, res) => {
// クライアントが「Expect: 100-continue」を送ってきた場合
if (req.headers[‘expect’] === ‘100-continue’) {
// サーバー側で受け入れ可能かチェック
console.log(“クライアントから送信準備の打診がありました”);
// 「準備OKだよ」と伝える(これが100 Continue)
res.writeContinue();
}
// 続きのデータを受け取る準備
req.on(‘data’, (chunk) => {
console.log(“データを受信中…”);
});
});
server.listen(8080);
もし「1xx」が無視されたら?
初心者が陥りがちなのが、古いプロキシサーバーや、100 Continueに対応していない古い設備を通ることで、この信号がうまく届かないケースです。その場合、クライアントは「サーバーから返事がない……」と戸惑い、通信がタイムアウトしてしまうことがあります。
—
まとめ:一歩ずつ理解しよう
- 1xx は「まだ途中だよ」という中間報告。
- 100 Continue は「本番データを送る準備はいい?」という確認作業。
- 101 Switching Protocols は「通信ルールの切り替え」の合図。
ネットワークエンジニアの仕事は、こうしたパケット同士の「会話」を読み解くことです。最初は難しく感じるかもしれませんが、「相手と自分の間で行われる、人間味あふれる確認作業」だと考えると、少し親近感が湧いてきませんか?
次にブラウザの「開発者ツール(F12)」を開いたとき、ネットワークタブで100番台の数字を見かけたら、「お、今まさに打ち合わせ中なんだな」と優しく見守ってあげてくださいね。
また次回の記事で、お会いしましょう!
コメント