HTTP/2 (RFC 7540・2015)(エイチティーティーピーツー)
IETF 2015年5月標準化のHTTP 第2世代。Google SPDY 派生・Stream Multiplexing / HPACK / Server Push / バイナリフレーミング、HTTP/1.1 (1997) からの18年ぶり大改訂。
概要
HTTP/2 は IETF が2015年5月にRFC 7540 として標準化したHTTP 第2世代プロトコル。Google が2009年から開発したSPDY (スピーディ・SPDY/3.1) を基盤に発展、IETF の Mark Nottingham / Martin Thomson 主導で標準化。HTTP/1.1 (1997年RFC 2068) からの18年ぶり大改訂、Stream Multiplexing・HPACK ヘッダ圧縮・Server Push・バイナリフレーミング・優先順位制御で大幅高速化。HTTPS / TLS 1.2+ が事実上必須でセキュア・高速Web の標準、2024年Web トラフィックの50%+ がHTTP/2。
HTTP/1.1 vs HTTP/2
| 項目 | HTTP/1.1 (1997) | HTTP/2 (2015) |
|---|---|---|
| メッセージ形式 | テキスト | バイナリ (Frame) |
| 多重化 | なし | あり (Stream) |
| 同時接続数 | 6 (ブラウザ制限) | 1 (Stream多重化) |
| HoL Blocking | あり | あり (TCP層・HTTP層なし) |
| ヘッダ | 平文 | HPACK 圧縮 |
| Server Push | なし | あり (廃止傾向) |
| 優先順位 | なし | あり |
| Stream 数 | - | 100 (default) |
| TLS | 任意 | 事実上必須 |
| ヘッダ重複 | あり | HPACK で削減 |
Stream Multiplexing
HTTP/1.1 は 1接続 = 1 req/res のため:
- 6つの並列接続 (ブラウザ制限)
- 1 req完了待ち
- Head-of-Line Blocking
HTTP/2 は1接続上でN Stream 並列:
- 同時100+ req
- 独立した完了タイミング
- ヘッダ圧縮で帯域節約
HTTP/1.1:
Connection 1: req1 → res1 → req3 → res3
Connection 2: req2 → res2 → req5 → res5
(6 connections max)
HTTP/2:
Connection 1: req1, req2, req3, req4 → res1, res2, res3, res4 (Stream並列)
HPACK ヘッダ圧縮
HTTP/2 用ヘッダ圧縮アルゴリズム (RFC 7541):
- Static Table (62 共通ヘッダ事前定義)
- Dynamic Table (接続毎の追加学習)
- Huffman 符号化
- 同一ヘッダ繰返しを大幅圧縮
- 帯域30-50%削減 (典型)
バイナリフレーミング
HTTP/2 はテキスト → バイナリ Frame 化:
| Frame 種別 | 用途 |
|---|---|
| DATA | リクエスト / レスポンスボディ |
| HEADERS | リクエスト / レスポンスヘッダ |
| PRIORITY | Stream 優先順位 |
| RST_STREAM | Stream 中止 |
| SETTINGS | 接続パラメータ |
| PUSH_PROMISE | Server Push |
| PING | キープアライブ |
| GOAWAY | 接続終了 |
| WINDOW_UPDATE | Flow Control |
| CONTINUATION | ヘッダ継続 |
Server Push (廃止傾向)
サーバが要求前にリソース送信:
- HTML 解析前にCSS / JS / 画像Push
- 当初の期待: 大幅高速化
- 実際: Cache Busting / Push 効率の困難
- 2022年Chrome がServer Push 廃止 (現代RFC 9113 で「非推奨」)
HTTP/2 採用率 (2024年)
| 地域 | HTTP/2 採用率 |
|---|---|
| 全世界 | 50%+ (主流) |
| 米国 | 55% |
| Cloudflare 配信 | 95%+ |
| Google サーバ | 100% (HTTP/3 経由) |
SPDY → HTTP/2 移行
| 年 | 出来事 |
|---|---|
| 2009 | Google SPDY 公開 |
| 2012 | Chrome / Firefox SPDY 採用 |
| 2014-11 | IETF Last Call (HTTP/2 ドラフト) |
| 2015-02 | HTTP/2 標準化承認 |
| 2015-05 | RFC 7540 公開 |
| 2016 | SPDY 廃止 |
| 2022-06 | RFC 9113 改訂版 |
主要対応Webサーバ
| サーバ | HTTP/2 サポート |
|---|---|
| nginx | 1.9.5+ (2015-09) |
| Apache HTTPD | 2.4 + mod_http2 |
| Caddy | 2.0+ (標準) |
| LiteSpeed | 5.0+ |
| H2O | 2.0+ |
| IIS | 10 (Windows 10 / Server 2016) |
| Cloudflare | 全Edge |
| AWS ALB / CloudFront | 全 |
関連用語との違い
- vs HTTP/1.1: 多重化・バイナリ・ヘッダ圧縮
- vs HTTP/3: TCP / UDP・HoL Blocking 解消差
- vs WebSocket: 双方向 / 単方向
FAQ
Q1: 自分のサイトHTTP/2 化?
A: nginx 1.9.5+ で listen 443 ssl http2; で1行追加。SSL証明書 (Let's Encrypt 等) が前提。Caddy / Cloudflare 経由なら自動。
Q2: HTTP/3 への移行は? A: HTTP/2 (TCP) は安定継続・HTTP/3 (UDP/QUIC) は新規併用。両者並存でAlt-Svc ヘッダ経由自動切替。
Q3: HoL Blocking 解消は不完全? A: HTTP/2 はHTTP層でMultiplexing解消だが、TCP層 (1パケット損失で全Stream 停止) はそのまま。HTTP/3 (QUIC) で完全解消。