はじめに
社内のネットワークについて調査をしている時に、HTTP/2とHTTP/3といった用語を目にして、「HTTP通信にもバージョンがあるのか」と思ったことがきっかけで気になった内容をまとめました。
HTTPのこれまで
HTTP/1.1とHTTP/2の違い
普段、私たちがWebページを見る時に使われているHTTPは厳密に言うとHTTP/1.1やHTTP/2でTCPプロトコルを使用している通信みたいです。
複数のリクエストを同時に処理できる
例えば、Webページを表示するときに、HTML、CSS、JavaScript、画像2枚を取得すると言う場合、
HTTP/1.1では下記のように順番に処理を行います。
(実際にはブラウザが複数のTCP接続を同時に張ることで、ある程度は並列化しているのですが、1つの接続の中では順番待ちが発生します。)
1.HTML取得 → 2.CSS取得 → 3.JS取得 → 4.画像1取得 → 5.画像2取得
HTTP/2の通信になると、1つのTCP接続の中で1〜5までの処理を並行して行えるようになったので、表示されるまでの待ち時間が短縮されるようになりました。
フォーマットの違い
HTTP/1.1は人間でも読める下記のようなテキスト形式で通信を行います。
GET /index.html HTTP/1.1
Host: example.com
HTTP/2になるとバイナリ形式に変換して通信するため、コンピュータは高速で効率的に処理することができるようになりました。
ヘッダーの圧縮
また、HTTP通信では下記のようなヘッダー情報を送りますが、
User-Agent: xxx
Accept: xxx
Cookie: xxx
HTTP/2ではHPACKという仕組みを利用して、ヘッダー情報を圧縮できるため、通信量を削減できるようになっています。
HTTP/3について
HTTPとTCPの関係
ここまで見てきたHTTP/1.1とHTTP/2は、いずれも通信の信頼性を確保するためにTCPプロトコルの上で動作しています。
HOLブロックについて
TCPプロトコル上では、以下のようにパケットを順番に送信します。
1 → 2 → 3 → 4
もし途中で「2」のパケットが失われた場合、TCPでは再送を⾏いますが、「2」が届くまで「3」「4」はアプリケーション側では利用できません。(3、4は届いていても2が来るまで処理されない)
1 → 2(再送待ち) → 3 → 4
HTTP/2では1つのTCP接続上で複数の通信を並行してできるようになりましたが、この問題自体は根本的には解消されませんでした。この問題を HOLブロッキング(Head-of-Line Blocking) と呼びます。
HTTP/3の登場とQUIC
このようなHTTP通信の問題を解決すべく登場したのがHTTP/3です。HTTP/3はTCPではなく、QUICを利用しています。(UDP+QUICで一つのプロトコルとして機能しています。)
UDP自体には、データ到達確認・再送制御・順序保証といった機能がありません。そこでQUICが、TCPの代わりにこれらの信頼性を担っています。
QUICについて
QUICはUDP上で、動作する新しい通信プロトコルです。TCPが提供していた機能をHTTP通信に適した形で再設計しています。主な特徴は次の4つです。
- 認証・暗号化を高速に行う
- 低遅延でコネクションを確立する
- 多重化によってストリームを独立させる
- モバイル環境でも安心して利用できる
認証・暗号化を高速に行う
従来のHTTPS通信は
TCP接続 → TLS接続 → HTTP/1.1 or HTTP/2
という順番で処理が進みますが、HTTP/3では
QUIC → HTTP/3
という構造になっていて、初回接続でも1往復で通信を始められるようになっています。
低遅延でコネクションを確立する
HTTP/3では、一度接続したことがあるサーバーに対しては、ハンドシェイクの完了を待たずにデータ送信を始める0-RTTという仕組みがあり、接続するまでの時間を短縮できます。
多重化によってストリームを独立させる
QUICは1つの接続内に複数のストリームを作ることができ、それぞれが独立した通信として扱います。
そのため、1つのストリームで通信が失敗しても、他のストリームは待たされることがありません。TCPでは解消できなかった前述したHOLブロックが、QUICでは解消されています。
コネクションマイグレーション
QUICの接続は送信元のIPアドレスとポート番号ではなく、コネクションIDという識別子で管理されているため、スマートフォンがWi-Fiからモバイル回線に切り替わってIPアドレスが変わっても、コネクションIDが同じであれば接続を張り直さずに通信を継続できます。これをコネクションマイグレーションと呼び、モバイル環境でも安心して通信を利用できます。
HTTP/3が使用されているサービス
HTTP/3は特にリアルタイム性や通信品質が重要なサービスで活かされています。実際にYouTubeで動画を再生した際の通信を確認してみると、HTTP/3が使われていることが確認できます。

GoogleやFacebookなど大手のサービスでも採用が進んでいますが、UDP通信自体がファイアウォールでブロックされることもあり、その場合は自動的にHTTP/2などにフォールバックする仕組みになっているようです。
まとめ
HTTP/3について調べたことでHTTPのこれまでについての理解とより具体的な特徴などの理解を深めることができました。この記事がHTTP通信を理解する一助になれば幸いです。