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リクエスト/レスポンスの仕組みを可視化

ブラウザのクロスオリジン制約とCORSヘッダーによるアクセス制御の仕組みを可視化

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

RabbitMQなどで使われるAMQPのExchange・Queue・Bindingの仕組みを可視化します

HTTPハンドシェイクから始まる双方向リアルタイム通信プロトコルの仕組みを可視化

ブラウザ間のP2P通信。ビデオ通話・画面共有・ファイル転送に使われるリアルタイム通信技術