【入門編】HTTP/1.1のExpect: 100-continueヘッダーの挙動 – HTTPプロトコル・通信規格実践ガイド

「大きな荷物を送る前に、相手に聞く?」HTTPのExpect: 100-continueを徹底解説!

こんにちは!ネットワークの世界へようこそ。今日は、Web通信の裏側で密かに行われている「ちょっと気の利いたやり取り」についてお話しします。

皆さんは、巨大なファイルを誰かに送るとき、どうしますか?いきなり玄関の前にドカンと荷物を置いて、「受け取ってください!」と叫ぶでしょうか。もし相手が留守だったり、家の掃除中だったりしたら困りますよね。

HTTP通信の世界でも、これと全く同じことが起きています。Webブラウザ(クライアント)が大きなデータをサーバーに送ろうとするとき、「今から巨大なデータを送るけど、受け取れる状態ですか?」と確認する仕組みがあるんです。それが今回紹介する『Expect: 100-continue』というヘッダーです。

—

なぜ「確認」が必要なのか?

HTTP/1.1という規格で導入されたこの仕組み。なぜわざわざ確認の手間を挟む必要があるのでしょうか。

想像してみてください。あなたは今、100MBもの高解像度動画をサーバーにアップロードしようとしています。しかし、サーバー側には「認証エラー」や「容量オーバー」といった、受け入れ拒否の理由があるかもしれません。

もし、確認せずに100MBのデータを全部送りつけてしまったらどうなるでしょう?
1. 回線を無駄に占有する。
2. サーバーはせっかく受け取ったデータを、結局捨てることになる。
3. ユーザーは「失敗しました」というメッセージが出るまで、無駄な待ち時間を過ごす。

これって、とてももったいないですよね。そこで、「本体を送る前に、まずは手紙(ヘッダー)だけ先に送って、許可をもらおう」というのがこの仕組みの狙いです。

—

郵便配達で例える「100-continue」の流れ

このやり取りを、郵便配達に例えてみましょう。

1. 【クライアントからの打診】
「大きな荷物を送りたいです。受け入れ可能ですか?」という手紙(Expect: 100-continue)をサーバーに送ります。
2. 【サーバーからの返事】
サーバーはそれを見て、「OK、準備はできているよ!」という「100 Continue」というサインを返します。
3. 【本体の送信】
これを確認したクライアントは、安心して巨大な荷物(データ本体)を送り届けます。

もしサーバーが「いや、今はダメだ」となれば、すぐに「417 Expectation Failed」などのエラーを返してくれます。これで、無駄な通信をせずに済むわけです。

—

実際にどんなやり取りをしているの?

エンジニアとして、この通信を少しだけ覗いてみましょう。通信の中身(パケット)をキャプチャすると、こんなやり取りが見えてきます。

クライアント(ブラウザやアプリ)からの最初の挨拶

POST /upload HTTP/1.1
Host: example.com
Content-Type: video/mp4
Content-Length: 104857600 # 100MBの巨大データだよ!
Expect: 100-continue # 「送ってもいい?」と聞いています

サーバーからの返事

HTTP/1.1 100 Continue # 「準備OK!本体を送ってくれ!」

サーバーからこの「100」という数字が返ってきて初めて、クライアントは本来のデータを流し始めます。もしサーバーが忙しくて受け取れないなら、ここでエラーを返してくれるので、クライアントはデータを送信せずに済みます。

—

効率化の裏にある「注意点」

この仕組みは非常に賢いのですが、現場でトラブルシューティングをする際には一つだけ覚えておいてほしいことがあります。

それは、「すべてのサーバーやプロキシが、この確認を正しく処理できるわけではない」ということです。

古いサーバーや、間に挟まっている中継機器(ロードバランサーなど)がこの「100-continue」という言葉を知らない場合、「何そのヘッダー?意味がわからないから無視するね」となったり、最悪の場合は接続が切れてしまうこともあります。

最近のWeb開発では、通信のオーバーヘッド(遅延)を極限まで減らすために、この確認を省略するケースも増えています。インフラエンジニアとしては、「巨大なファイルを扱う際に、このExpectヘッダーがボトルネックになっていないか、あるいは逆にサーバー側の処理を止めていないか」を疑う視点を持つことが、プロへの第一歩です。

—

まとめ:ネットワークは「思いやり」でできている

「Expect: 100-continue」は、単なる通信のルールではなく、クライアントとサーバー間の「お互いの状況を慮る(おもんばかる)ためのマナー」のようなものです。

ネットワークのトラブルは、こうした「当たり前のやり取り」のどこかでボタンの掛け違いが起きて発生します。もしWebサイトでファイルのアップロードがうまくいかないときは、ぜひこの「100-continue」というキーワードを思い出してみてください。

一歩ずつ、パケットの気持ちになって考えていけば、必ず解決の糸口は見つかります。一緒にネットワークの世界を楽しみましょうね!

コメント

タイトルとURLをコピーしました