HTTP/2とは?
HTTP/2 は HTTP プロトコル(RFC 7540 として標準化される)の大きなリビジョンで、バイナリフラミング、マルチプレックス、ヘッダの圧縮、サーバが HTTP/1.1 を超える Web パフォーマンスを飛躍的に向上させます。HTTP/2 対 HTTP/1.1
| 特徴: | HTTP/1.1の | HTTP/2 |
|---|---|---|
| フォーマット | テキストベース | バイナリ |
| コネクション | 複数の(ホストごとの6-8) | シングルマルチプレックス |
| リクエスト処理 | シーケンシャル | 並列ストリーム |
| ヘッダーの圧縮 | なし | 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バイト |
| 必須リクエスト | ~800バイトごとに | ~20-50バイト(インデックス) |
ストリーム優先順位付け
Priority Tree:
Root (connection)
├── CSS (weight: 256, high priority)
├── JavaScript (weight: 220)
└── Images (weight: 110, lower priority)
サーバー要件
| サーバー | HTTP/2 サポート |
|---|---|
| ログイン | 1.9.5以上 |
| パスワード | 2.4.17+ (mod http2) |
| ノード.js | 8.4+ (ネイティブ) |
| アイス | Windows 10/サーバー 2016+ |
性能の利点
- 遅延: シングル接続でTCPハンドシェイクオーバーヘッドを排除
- Betterの圧縮:繰り返す要求の85-90%ヘッダーのサイズの減少
- 並列ローディング: すべてのリソースが同時にロードされる
- サーバー プッシュ: ブラウザのリクエストの前にリソースを積極的に送信する
ベストプラクティス
1. TLSを有効にして下さい:HTTP/2は実質的にHTTPSを要求します(ブラウザはそれを強制します)
2. ドメインシャーディングを削減: 複数のドメインがパフォーマンスを傷つけるようになりました
3. ファイルを隠す: マルチプレックス化により、冗長化が不要
4. サーバーの押しを注意深く使用して下さい: 重要なリソースのみをプッシュする
5. モニターのパフォーマンス:HTTP/2が特定のユースケースを改善します
HTTP/2 は、ネットワーク接続の効率的な利用により、ほとんどのウェブサイトのパフォーマンス向上を実現します。