3月13日、HTTPのデバッグツールを開発するHTTP Toolkitが「HTTP/3はどこにでもあるが、どこにもない(HTTP/3 is everywhere but nowhere)」と題した記事を公開し、大きな話題を呼んでいる。この記事では、HTTP/3とQUICの標準化・普及状況の現状と課題について詳しく紹介されている。
HTTP/3は「どこにでもある」が「どこにもない」
HTTP/3はQUICを基盤とし、TCPベースのHTTP/2よりも接続やデータ転送の効率を向上させるテクノロジーだ。HTTP/3はすでにブラウザの95%で対応が行われ、CDNでもHTTP/3の利用が進んでいるなど、 表面的には「どこにでもある」ように見える。
しかし、多くの開発者が利用するNode.js、Go、Rust、Python、Rubyなどの標準ライブラリにはQUICやHTTP/3が含まれていないか、サポートが実験的機能にとどまっている。またNginxやApacheといった人気WebサーバもHTTP/3対応は実験レベルまたは計画が停滞中であり、Ingress-Nginxもサポートを断念して次世代プロジェクトに移行している。 実際には「どこにもない」状態が続いている というわけだ。
しかしHTTP/3はブラウザにのみ有用というわけではなく、API通信やモバイルアプリ、IoT環境など幅広いユースケースに利益をもたらす。その理由は以下のとおりだ。
- マルチプレックス機能により、単一のTCP接続で複数リクエストを同時にやり取りできる
- ヘッダ圧縮による通信量の削減が可能
- 双方向ストリーミングの仕組みにより、gRPCなどの新たな通信パターンが実現
- 優先度制御など高度なリクエスト管理が行いやすい
さらにHTTP/3はQUICをベースとしているため、以下のメリットも享受できる。
- TCPの厳格なパケット順序から解放され、パケットロスが一部のストリームに限定される
- 0RTTでのハンドシェイクを可能にし、接続開始の待ち時間を大幅に削減
- 接続数や通信データ量の削減によりクライアント側のバッテリー消費やサーバ側のリソース消費を抑制
- 接続マイグレーションによりIPアドレスが変わっても同じセッションを継続可能
- 新しい輻輳制御アルゴリズムBBRの採用などによりネットワーク効率が大幅に向上
- WebTransportなど、従来のWebSocketでは困難だった新しい通信パターンをサポート
HTTP/3が大幅な速度向上をもたらすというベンチマークや事例もすでに数多く存在する。
以下は、RequestMetricが行ったベンチマークの結果だ。HTTP/1.1とHTTP/2、HTTP/3を比較し、驚くべきパフォーマンスの向上が見られている。
またFastlyによると、HTTP/3を導入することでTTFB (Time To First Byte)を18%も改善したという。
ハイパースケールとロングテールの分断
HTTP/3は現状、「ハイパースケール(大手ブラウザ企業や大規模CDN)」と「ロングテール(それ以外の多種多様な開発者コミュニティや個人、小規模サービス)」の二層構造を浮き彫りにしている。
- ハイパースケール: 大手企業間で標準化が迅速に進み、高額な投資や独自実装により先行している。
- ロングテール側 オープンソースプロジェクトやボランティアベースの開発が中心で、OpenSSLなどTLSライブラリとの互換性や標準ライブラリへの統合が進まず、HTTP/3を容易に利用できない。
特に OpenSSLのQUIC対応は最大の課題 とされている。BoringSSLのアプローチと互換性がなく、既存のQUIC実装がそのままではOpenSSLを利用できない状態が続いている。結果としてcurl、Node.jsなど、多くの環境が公式にQUIC/HTTP/3を組み込めないでいる。
こうした技術的・組織的分断を解消するために、OpenSSLとQUIC実装との協調や、新たな標準ライブラリへの統合が必要だ。とはいえ当面はまだ道のりが長く、今すぐすべての環境でHTTP/3をエンドツーエンドで使うのは難しい。開発者がHTTP/3を本格的に活用できるようになるまでには、以下の点がカギになると考えられる。
- OpenSSLをはじめとする主要TLSライブラリがQUICとの互換性を整備し、安定版をリリースする
- Node.js、Go、Pythonなどの標準ライブラリがHTTP/3をサポートし、一般開発者が簡単に利用できるようになる
- サーバソフトウェア(Nginx、Apacheなど)やKubernetes関連ツールでのHTTP/3対応が正式に行われる
最終的にはハイパースケールだけでなく、ロングテールのコミュニティ全体がHTTP/3のメリットを享受できる形に進むことが重要である。
詳細はHTTP/3 is everywhere but nowhereを参照していただきたい。