「一本の道で大渋滞?」はもう古い。HTTP/2の「ストリーム」でWeb通信をスマートにこなそう!
こんにちは!ネットワークの世界へようこそ。
普段、何気なくブラウザでWebサイトを見ているとき、裏側で何が起きているか想像したことはありますか?
かつて、Webの世界では「HTTP/1.1」というルールが主流でした。これは、お店のレジが一つしかなくて、前の人が買い物を終えるまで後ろの人が待たされるような、少しもどかしい仕組みでした。
しかし、今のWebはもっと賢い。今回は、その立役者である「HTTP/2のストリーム」という概念を、身近な例えを交えて紐解いていきましょう!
—
1. 「ストリーム」って一体なに?
HTTP/2の最大の特徴は、「一本のTCP接続(道路)を、複数の車線に分割して使う」ことです。
ここで登場するのが「ストリーム」という考え方。難しく考えず、こうイメージしてみてください。
- 一本の道路(TCP接続): あなたの家からWebサーバーまでの物理的な回線。
- ストリーム: その道路の中に作られた、「論理的な個別の専用レーン」。
これまでは、「HTMLを送る」→「画像を送る」→「CSSを送る」というように、順番待ちが必須でした。しかし、ストリームを使えば、一つの接続の中で「HTML用のレーン」「画像A用のレーン」「画像B用のレーン」を同時に動かせるようになったんです。これを専門用語で「マルチプレクシング(多重化)」と呼びます。
—
2. ストリームの「一生(ライフサイクル)」を追ってみよう
ストリームは、生成されてから消えるまで、まるで生き物のように状態を変えていきます。郵便配達のやり取りに例えてみましょう。
① 生成(Open)
あなたがWebサーバーに「この画像ちょうだい!」とリクエストを送る瞬間、新しいストリームが「新規作成」されます。ここでストリームにはID(通し番号)が振られます。
② アクティブ(Active)
リクエストを受け取ったサーバーが、データの断片(フレーム)をせっせと送り出している状態です。ブラウザ側も、送られてきた断片をパズルのように組み立てて、画像を表示する準備をしています。
③ 半クローズ(Half-Closed)
サーバーが「はい、画像データ全部送り終わったよ!」と伝えた状態です。まだ接続自体は生きていますが、サーバーからはもう送るものがありません。
④ クローズ(Closed)
ブラウザ側も「無事受け取ったよ、ありがとう!」と確認を終えたら、そのストリームは役目を終えて消滅します。お疲れ様でした!
—
3. 実務で役立つ「ストリーム」の観察方法
インフラエンジニアとして現場に出ると、「なぜか画像が表示されない!」「通信が途切れる!」というトラブルに遭遇します。そんなとき、ブラウザの「開発者ツール(F12キー)」を覗いてみましょう。
Chromeなどの「Network」タブを見てみてください。
開発者ツールで確認できる情報のイメージ
Name: logo.png
Status: 200
Protocol: h2 (これがHTTP/2の証!)
Priority: Highest
Stream ID: 13 <-- これが今使っている「ストリーム番号」です!
もし通信が遅いと感じたら、「IDが何番のストリームで止まっているか?」を確認するだけで、「どのファイルのリクエストが詰まっているのか」という原因切り分けが驚くほど速くなります。
—
4. 最後に:一歩ずつ理解すれば大丈夫!
最初は「ストリーム? フレーム? HPACK?」と頭がパンクしそうになるかもしれません。でも、無理にすべてを一度に覚える必要はありません。
まずは、「一本の太いパイプの中に、小さな通り道をたくさん作って、みんなが同時に通行できるようにしたんだな」とイメージするだけで、ネットワークの解像度は格段に上がります。
今日の帰り道、Webサイトを開くときに「あ、今このブラウザの中で、ストリームたちが仲良く並走しているんだな」なんて想像してみてください。それが、ネットワークエンジニアへの第一歩です!
もし「もっと詳しいパケットの中身が知りたい!」という好奇心が湧いてきたら、またいつでもここへ戻ってきてくださいね。一緒に深掘りしていきましょう!
コメント