HTTP/2とは?
HTTP/2は、HTTPプロトコルを大幅に改訂した仕様(RFC 7540として標準化)であり、バイナリフレーミング、マルチプレクシング、ヘッダー圧縮、サーバープッシュによってHTTP/1.1よりウェブ性能を大きく向上させます。HTTP/2とHTTP/1.1の比較
| 特徴 | HTTP/1.1 | HTTP/2 |
|---|---|---|
| 形式 | テキストベース | バイナリ |
| 接続 | 複数(ホストごとに6~8本) | 1本の多重化接続 |
| リクエスト処理 | 順次 | 並列ストリーム |
| ヘッダー圧縮 | なし | HPACK圧縮 |
| サーバープッシュ | 利用不可 | 対応 |
| 優先順位付け | なし | ストリーム優先度 |
HTTP/2の仕組み
HTTP/1.1 (Head-of-Line Blocking):
Connection 1: Request A ──────────► Response A
Connection 2: Request B ──────────► Response B
Connection 3: Request C ──────────► Response C
(Multiple connections, sequential per connection)
HTTP/2 (Multiplexing):
Single Connection:
├── Stream 1: Request A ──► Response A
├── Stream 2: Request B ──► Response B
├── Stream 3: Request C ──► Response C
└── All interleaved on same connection
主な機能
バイナリフレーミング層
HTTP/2 Frame Structure:
┌─────────────────────────────────────┐
│ Length (24 bits) │
├─────────────────────────────────────┤
│ Type (8 bits) │ Flags (8 bits) │
├─────────────────────────────────────┤
│ Stream Identifier (32 bits) │
├─────────────────────────────────────┤
│ Frame Payload (variable) │
└─────────────────────────────────────┘
HPACKヘッダー圧縮
| シナリオ | HTTP/1.1ヘッダー | HTTP/2ヘッダー |
|---|---|---|
| 最初のリクエスト | 約800バイト | 約800バイト |
| 2回目以降のリクエスト | 毎回約800バイト | 約20~50バイト(インデックス化) |
ストリームの優先順位付け
Priority Tree:
Root (connection)
├── CSS (weight: 256, high priority)
├── JavaScript (weight: 220)
└── Images (weight: 110, lower priority)
サーバー要件
対応バージョンを確認して利用します。各サーバーの対応状況と必要な機能を表で確認できます。
| サーバー(実装例) | HTTP/2の対応状況と必要条件を確認します |
|---|---|
| nginx | 1.9.5+ |
| Apache | 2.4.17+ (mod_http2) |
| Node.js | 8.4+ (native) |
| IIS | Windows 10/Server 2016+ |
パフォーマンス上の利点
- 遅延の低減: 単一接続によりTCPハンドシェイクのオーバーヘッドをなくす
- 圧縮の改善: 反復リクエストでヘッダーサイズを85~90%削減する
- 並列読み込み: すべてのリソースを同時に読み込む
- サーバープッシュ: ブラウザーが要求する前にリソースを先に送る
ベストプラクティス
1. TLSを有効にする: HTTP/2は実質的にHTTPSを必要とし、ブラウザーもそれを強制する
2. ドメインシャーディングを減らす: 複数ドメインの利用は現在、性能を損なう
3. ファイル結合をやめる: 多重化によりバンドルの必要性が下がる
4. サーバープッシュを慎重に使う: 重要なリソースだけをプッシュする
5. 性能を監視する: 自分の用途でHTTP/2が改善したか検証する
HTTP/2はネットワーク接続をより効率的に使うことで、多くのウェブサイトの性能を大きく向上させます。