HTTPバージョンの違いと歴史
HTTPは版を重ねて通信の効率と安全性を高めてきました。0.9の「ただ取るだけ」から、1.1のKeep-Alive、2の多重化、3のQUICまで、ざっくり流れを押さえます。
ざっくり年表
主要バージョンの節目を押さえておくと設計やトラブルシュートが楽になります。
主なマイルストーン
- HTTP/0.9(1991頃): GETのみ、ヘッダーなしでHTMLを返すシンプル仕様。
- HTTP/1.0(1996):ヘッダー追加、ステータスコードやContent-Typeが整備。接続はリクエストごとに切断。
- HTTP/1.1(1997):Keep-Aliveが標準、パイプライニング、Hostヘッダー必須、チャンク転送、Cache-Controlなど多数。
- SPDY(2009):Google発の実験プロトコル。多重化・ヘッダー圧縮・優先度のアイデアがHTTP/2に継承。
- HTTP/2(2015):バイナリフレーミング+多重化+ヘッダー圧縮(HPACK)、優先度制御。
- HTTP/3(2022):トランスポートをTCPからQUIC(UDPベース)に変更。0-RTTやパケットロス耐性が向上。ヘッダー圧縮はQPACK。
バージョンごとの違い(概要)
どの課題を解決するための改訂かを意識すると理解しやすいです。
HTTP/1.0 → 1.1
- 持続接続(Keep-Alive)で接続の張り直しを削減。
- Hostヘッダー必須でバーチャルホストが現実的に。
- チャンク転送でストリーミング的な送信が可能に。
- Cache-ControlやETagでキャッシュ制御が明確に。
HTTP/1.1 → 2
- 1コネクション内での多重化。HOLブロッキング(ヘッダ行き詰まり)を軽減。
- ヘッダー圧縮(HPACK)でオーバーヘッド削減。
- 優先度制御で重要リソースを先に届けやすく。
- バイナリフレーミングで拡張しやすい構造に。
HTTP/2 → 3
- トランスポートをTCP→QUIC(UDP上)に変更。コネクションIDでパス変更に強く、ハンドシェイクも速い。
- パケットロス時のヘッド・オブ・ラインブロッキングを回避しやすい。
- ヘッダー圧縮はQPACKへ。TLSはQUICに内包(常時暗号化前提)。
いま使うなら
1.1は依然広く使われ、2がデフォルト、3は対応環境が増えつつも現実のトラフィックシェアはまだ小さい、というのが現状です。
実務メモ
- モダンなブラウザやCDNはHTTP/2/3に対応。ALPNで優先するプロトコルを交渉する。
- HTTP/3は一部ネットワーク機器でUDPブロックされる場合があり、フォールバックにHTTP/2/1.1を持つ構成が現実的。
- 実トラフィックではHTTP/3の割合はまだ低め(CDNや国・ISPによって大きく差がある)。段階的に有効化し、ログで比率を確認するのがおすすめ。
- 1.1しか使えないクライアントも残るため、サーバー設定で複数バージョンを併用するケースが多い。
- 監視はバージョン別の指標(ハンドシェイク時間、再送、QoE)を分けて見ると問題箇所を特定しやすい。
まとめ
HTTPはバージョンを重ねるごとに「つながりっぱなし」「並列」「暗号化前提」へ進化してきました。運用では複数バージョンの共存を前提にしつつ、2/3を優先するのが現実的です。