HTTP/1.1の直列処理とHTTP/2の多重化を、サイドバイサイドのウォーターフォールチャートで比較します。Head-of-line blockingの影響も確認できます。
HTTP/2は、HTTP/1.1の後継プロトコルで、2015年にRFC 7540として標準化されました。 Webページの読み込み速度を大幅に向上させるために設計されています。分かりやすいアナロジーで説明すると、HTTP/1.1は料金所が6つある高速道路のようなものです。 各料金所(TCP接続)では車(リクエスト)が1台ずつ順番に通過し、前の車が遅いと後ろの車も待たされます(Head-of-line blocking)。一方、HTTP/2は1本の道路に無制限の車線がある高速道路です。 1本のTCP接続の中で複数のリクエストが同時に並行して流れるため、1つの遅いリクエストが他をブロックしません。 上のビジュアライザーで「HOL blockingデモ」シナリオを選ぶと、この違いが鮮明に見えます。
| 項目 | HTTP/1.1 | HTTP/2 |
|---|---|---|
| 接続方式 | ドメインあたり最大6本のTCP接続 | 1本のTCP接続で多重化 |
| 多重化 | 非対応(直列処理) | 対応(ストリームで並行処理) |
| ヘッダー形式 | プレーンテキスト(毎回全送信) | HPACK圧縮(差分のみ送信) |
| サーバープッシュ | 非対応 | 対応(PUSH_PROMISE) |
| 優先度制御 | 非対応 | 対応(ストリーム優先度) |
| プロトコル | テキストベース | バイナリフレーム |
Head-of-line(HOL)blockingは、先頭のリクエスト/レスポンスが遅い場合に、後続のリクエストがブロックされる問題です。 これはHTTPの各バージョンで異なるレベルで発生します。
listen 443 ssl http2;Protocols h2 h2c http/1.1/* デフォルトで有効(設定不要) */
ブラウザとサーバー間のHTTPリクエスト/レスポンスの仕組みを可視化

HTTPSで安全に通信するためのTLSハンドシェイクの仕組みを可視化

UDPベースの次世代トランスポートプロトコル。0-RTT接続、ストリーム多重化、接続マイグレーションを可視化

ヘッダー.ペイロード.署名の構造と検証の仕組みを可視化

MQTTブローカーを経由したPublish/Subscribeモデルの通信フローを可視化します

サーバーからクライアントへの一方向リアルタイムストリーミング通信