HTTP/2
HTTP/1.1 の性能限界を解消するために設計された、多重化・ヘッダー圧縮・サーバープッシュを備えたプロトコル
HTTPパフォーマンス
HTTP/2 とは
HTTP/2 は、2015 年に標準化された HTTP プロトコルのメジャーバージョンで、HTTP/1.1 の性能限界 (Head-of-Line Blocking、多数の TCP 接続) を解消する。Google の SPDY プロトコルがベースになっている。
HTTP/1.1 の問題
HTTP/1.1: 1 つの TCP 接続で 1 リクエストずつ (直列)
[リクエスト1] → [レスポンス1] → [リクエスト2] → [レスポンス2]
ブラウザは 6 本の TCP 接続を並列に開いて回避 → 接続コストが高い
HTTP/2 の改善
HTTP/2: 1 つの TCP 接続で複数リクエストを多重化 (並列)
ストリーム1: [リクエスト1] → [レスポンス1]
ストリーム2: [リクエスト2] → [レスポンス2] ← 同時に処理
ストリーム3: [リクエスト3] → [レスポンス3]
| 機能 | HTTP/1.1 | HTTP/2 |
|---|---|---|
| 多重化 | ❌ (1 接続 1 リクエスト) | ✅ (1 接続で並列) |
| ヘッダー圧縮 | ❌ | ✅ (HPACK) |
| バイナリフレーム | ❌ (テキスト) | ✅ (バイナリ) |
| サーバープッシュ | ❌ | ✅ (非推奨化) |
| 必要な TCP 接続数 | 6 本 | 1 本 |
HTTP/3 (QUIC)
| 観点 | HTTP/2 | HTTP/3 |
|---|---|---|
| トランスポート | TCP | QUIC (UDP ベース) |
| HoL Blocking | TCP レベルで発生 | ストリームごとに独立 |
| 接続確立 | TCP + TLS (2〜3 RTT) | 0-RTT (再接続時) |
| 対応状況 | ほぼ全ブラウザ | 主要ブラウザ対応済み |
CloudFront での HTTP/2 / HTTP/3
CloudFront はデフォルトで HTTP/2 をサポートし、HTTP/3 もオプションで有効化できる。
フロントエンド開発への影響
HTTP/2 の多重化により、HTTP/1.1 時代の最適化テクニックが不要になった。
| テクニック | HTTP/1.1 | HTTP/2 |
|---|---|---|
| CSS スプライト | 必要 (リクエスト数削減) | 不要 |
| ファイル結合 | 必要 | 不要 (個別ファイルの方がキャッシュ効率が良い) |
| ドメインシャーディング | 必要 (接続数制限の回避) | 逆効果 (多重化が使えない) |
| インライン化 | 有効 | 不要 |
実務での活用方法は関連書籍にも詳しい。