HTTP/2

プロトコル & 標準
HTTP/1.1より高性能で、マルチプレキシングとヘッダー圧縮を導入したHTTPの大規模改訂版です。
← 用語集に戻る

HTTP/2とは?

HTTP/2は、HTTPプロトコルを大幅に改訂した仕様(RFC 7540として標準化)であり、バイナリフレーミング、マルチプレクシング、ヘッダー圧縮、サーバープッシュによってHTTP/1.1よりウェブ性能を大きく向上させます。

HTTP/2とHTTP/1.1の比較

特徴HTTP/1.1HTTP/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の対応状況と必要条件を確認します
nginx1.9.5+
Apache2.4.17+ (mod_http2)
Node.js8.4+ (native)
IISWindows 10/Server 2016+

パフォーマンス上の利点

ベストプラクティス

1. TLSを有効にする: HTTP/2は実質的にHTTPSを必要とし、ブラウザーもそれを強制する

2. ドメインシャーディングを減らす: 複数ドメインの利用は現在、性能を損なう

3. ファイル結合をやめる: 多重化によりバンドルの必要性が下がる

4. サーバープッシュを慎重に使う: 重要なリソースだけをプッシュする

5. 性能を監視する: 自分の用途でHTTP/2が改善したか検証する

HTTP/2はネットワーク接続をより効率的に使うことで、多くのウェブサイトの性能を大きく向上させます。

この知識を実践する

DomScan の API を使用してドメインの可用性、状態などを確認します。