HTTP/1.1の「行列」とHTTP/2の「魔法の仕分け」:通信の渋滞をどう解消したのか?
こんにちは!ネットワークの世界へようこそ。
普段、何気なくウェブサイトを見ているとき、ブラウザの裏側で何が起きているか想像したことはありますか?
今日は、インターネットの「通信のルール」であるHTTPが、どうやって効率化を進めてきたのか、その歴史の中で最も劇的な進化の一つである「多重化(Multiplexing)」についてお話しします。
専門用語の羅列は置いておいて、まずは私たちの身近な「郵便」に例えて紐解いていきましょう。
—
1. HTTP/1.1の限界:レジ待ちのイライラ
HTTP/1.1の世界では、一つのリクエストに対して一つのレスポンスが返ってくるまで、次の注文ができません。これを「直列処理」と言います。
郵便配達の例え
あなたが通販で「本」と「ペン」を別々に注文したとします。
HTTP/1.1の仕組みだと、こんなことが起きます。
1. 「本」を注文する。届くまで待つ。
2. 「本」が届く。
3. やっと「ペン」を注文できる。届くまで待つ。
もし、「本」の配達で道が渋滞していたらどうでしょう?「ペン」がどんなに早く準備できていても、あなたは「本」が届くのをひたすら待ち続けなければなりません。これがネットワークの世界で言う「HOL(Head-of-Line)ブロッキング」という現象です。
「前の荷物が詰まっているから、後ろの荷物が動けない!」という、いわゆる「レジ待ちの渋滞」ですね。
—
2. HTTP/2の革命:ストリーム多重化
この不条理を解決するために登場したのが、HTTP/2の「ストリーム多重化(Multiplexing)」です。
HTTP/2では、一つのコネクションの中で、バラバラの荷物を小さな「小包(フレーム)」に分解して、混ぜこぜにして送ります。
郵便配達の例え
HTTP/2では、配達員さんがこう動いてくれます。
- 「本」のページ1と「ペン」の部品Aを、一つの大きなトラックに積み込む。
- 同時に運ぶから、どちらが先に届くかに関わらず、受け取った側でパズルのように組み立て直せばいい。
これなら、「本」の配達で渋滞が起きても、「ペン」の部品は別の枠でスイスイ通り抜けていくことができますよね。これが多重化の力です。
—
3. なぜ「バイナリ」である必要があるのか?
ここだけ少し技術的な話をさせてください。HTTP/1.1は「テキスト(人間が読める文字)」で通信していましたが、HTTP/2は「バイナリ(0と1の塊)」で通信します。
なぜでしょう?
人間が読みやすいテキストだと、コンピューターが「どこまでがヘッダーで、どこからが中身か」を判別するのに、文字を一つずつ確認する手間がかかります。一方で、バイナリフレームという形式なら、「最初の何バイトはデータの種類、次の何バイトはストリームID(どの荷物の一部か)」というルールが明確なので、コンピューターは超高速で仕分けができるのです。
実践:どうやって確認するか?
皆さんのブラウザ(Chromeなど)の開発者ツール(F12キー)を開いてみてください。
「Network」タブで、プロトコルが「h2(HTTP/2)」になっている通信を見てみると、以下のような構造が隠されています。
HTTP/2では、こんなイメージでデータが細切れに流れます
[フレーム1: ストリームID 1 | データ: 本の最初のページ]
[フレーム2: ストリームID 2 | データ: ペンの部品A]
[フレーム3: ストリームID 1 | データ: 本の続きのページ]
これらをブラウザ側で受け取って、IDごとに組み立てる!
—
4. 現場のエンジニアが知っておくべきこと
HTTP/2のおかげで、私たちは「画像の読み込みが遅い…」とイライラする機会が劇的に減りました。しかし、一つだけ注意点があります。
「サーバーとブラウザの両方がHTTP/2に対応している必要がある」ということです。
もし、どちらかが古い規格(HTTP/1.1)しか使えなければ、せっかくの多重化も使えず、昔ながらの「レジ待ち」状態に戻ってしまいます。最近ではHTTPS(暗号化通信)を利用する際、自動的にHTTP/2が選択されることがほとんどですが、インフラを構築する際は「WebサーバーがHTTP/2を許可しているか(ALPNの設定など)」を確認するのが定石です。
—
まとめ:ネットワークは「整理整頓」の歴史
- HTTP/1.1は、一つの注文が終わるまで次に行けない「直列の列」。
- HTTP/2は、小包を細かく分解して同時に運ぶ「高速物流システム」。
- バイナリフレームは、コンピューターが爆速で仕分けをするための「共通伝票」。
ネットワークの世界は、少しずつ「どうすれば待たなくて済むか」という工夫の積み重ねでできています。
もし現場で「表示が遅いな?」と感じたら、まずは「もしかしてHTTP/1.1で渋滞しているのでは?」と疑ってみてください。その視点を持つだけで、あなたはもう立派なインフラエンジニアの第一歩を踏み出していますよ!
それでは、また次回の技術探訪でお会いしましょう!
コメント