【入門編】HTTP/1.1におけるパイプライン化の限界と課題 – HTTPプロトコル・通信規格実践ガイド

なぜ「HTTPパイプライン化」は消えたのか?―Webの渋滞とHead-of-Line Blockingの正体

こんにちは!インフラエンジニアとして日々ネットワークの深淵を覗いている筆者です。

今日は、Web通信の歴史の中でも、特に「野心的なのに、なぜか不遇だった」技術、HTTP/1.1の「パイプライン化(Pipelining)」についてお話ししましょう。

「リクエストをまとめて送れば速くなるのでは?」という直感から生まれたこの技術。しかし、現代のWebブラウザでは、実はこの機能はほぼ無効化されています。一体、現場のネットワークで何が起きていたのでしょうか?

一歩ずつ、身近な例えで紐解いていきましょう。

—

1. パイプライン化とは?「郵便配達」でイメージしてみよう

HTTP/1.1以前の通信は、まるで「一問一答」のやりとりでした。

  • あなた:「手紙をください」
  • サーバー:「はい、どうぞ(手紙を渡す)」
  • あなた:「あ、もう一通追加でください」
  • サーバー:「はい、どうぞ(手紙を渡す)」

これだと、往復の時間がかかるたびに待ち時間が発生してしまいますよね。そこで登場したのがパイプライン化です。

「返事を待たずに、リクエストをどんどんポストに投函しちゃおう!」というのがこの仕組みの正体です。

1. 「手紙Aください」
2. 「手紙Bください」
3. 「手紙Cください」
(一度にまとめてポストへ!)

これなら、サーバー側も忙しく動いて、準備ができた順に返事を返してくれるはず……そう思われていました。しかし、ここにWeb通信特有の「落とし穴」があったのです。

—

2. 悪夢の「Head-of-Line Blocking(先頭行のブロック)」

パイプライン化が直面した最大の壁、それがHead-of-Line Blocking(先頭行のブロック)です。

想像してみてください。あなたはレストランで「カレー」「サラダ」「デザート」を注文しました。パイプライン化では、これらを一気に注文します。しかし、サーバー(厨房)は「注文を受けた順番通りに」料理を出し切らなければならないというルールがありました。

もし、「カレー」の調理にものすごく時間がかかったらどうなるでしょう?

  • カレー(調理中…まだできない)
  • サラダ(できているのに、カレーのせいで出せない!)
  • デザート(準備万端なのに、カレーのせいで出せない!)

結果として、「一番前のカレーのせいで、後ろの料理まで全部ストップしてしまう」という渋滞が発生するのです。ネットワークの世界では、これが「パケットの待ち行列」として起きていました。たった一つの重い画像データが詰まるだけで、その後に続く軽快なテキストデータまで全て「お預け」を食らってしまうのです。

—

3. なぜ現代のブラウザでは使われていないのか?

この「先頭行のブロック」問題に加え、サーバー側の実装が複雑になりすぎてしまったことも致命的でした。

例えば、多くのWebサーバー(ApacheやNginxなど)では、パイプライン化されたリクエストを正しく処理するために、以下のような負荷がかかります。

現代のサーバー設定例
keepalive_requests 100; # 接続を維持してリクエストを再利用する設定
keepalive_timeout 65; # 接続を切るまでの時間
※パイプライン化が有効だと、サーバー側で順序を守るためのメモリ消費が激増します

実装が難しく、少しでもバグがあれば通信が切断される。さらに、結局「渋滞」は解消されない。結局、Google ChromeやFirefoxなどの主要ブラウザは、この機能を「あえて使わない」という選択をしました。

「リクエストをまとめて送る」というアイデアは間違いではありませんでしたが、「順番を厳守せよ」というHTTP/1.1の縛りが、現代の高速なWebには窮屈すぎたのです。

—

4. そして「HTTP/2」へ――革命の時代

この「パイプライン化の挫折」を乗り越えるために生まれたのが、HTTP/2です。

HTTP/2では、「ストリーム」という概念を導入しました。これは、一つの通信路(コネクション)を細かく分割して、複数のリクエストを「順番を気にせず並行して」やりとりできるようにする仕組みです。

さきほどのレストランの例で言えば、カレーができるのを待たずに、サラダとデザートを先に別のルートで運ぶようなイメージですね。

初学者が覚えておくべきポイント

  • HTTP/1.1のパイプライン化は「順番待ちの列」を作ってしまう。
  • 先頭の処理が遅れると、後ろがすべて止まる「Head-of-Line Blocking」が発生する。
  • この教訓を経て、HTTP/2では「多重化」という手法で真の並行処理を実現した。

—

まとめ:失敗は成功の母

パイプライン化は、決して無駄な技術ではありませんでした。私たちが今、高速にWebサイトを閲覧できているのは、「パイプライン化をやってみて、何がボトルネックなのかを痛感した」という歴史的な経験があったからです。

ネットワークの世界では、「仕組みを速くする」ことと同じくらい、「渋滞をどう回避するか」が重要です。次にWebサイトを見るとき、裏側でどんな工夫がなされているのか、少しだけ想像してみてくださいね。

それでは、また次回の深掘り解説でお会いしましょう!Happy Hacking!

コメント

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