背景・目的
CloudFrontでHTTP/3がサポートされたブログを見つけました。
HTTP/3をあまり良くわかっていないので、このタイミングで概要を学ぼうと思います。
まとめ
- HTTP/3はQUICという技術を使用している。
- 転送はバイナリで行われる。
- ハンドシェイクが1回だけで済む。(従来はTCPやTLSでは複数回のハンドシェイクが必要とされていた)
- UDPを基盤として使用している。
- メタデータを含めて完全に暗号化され、通過するNATデバイス、ファイアウォールなどで参照、操作がされない。
- TLS1.3を必須としている。
- 低速NW、遅延の影響を受けやすい接続で実行速度が向上する。
概要
What is HTTP/3?
HTTP/3 は QUIC を使用し、TCP の制限の多くを克服し、それらの利点を HTTP にもたらします。 TCP および TLS で既存の HTTP/2 を使用する場合、TCP はクライアントとサーバー間のセッションを確立するためにハンドシェイクを必要とし、TLS もセッションが保護されていることを確認するために独自のハンドシェイクを必要とします。各ハンドシェイクは、クライアントとサーバーの間で完全な往復を行う必要があります。これは、クライアントとサーバーがネットワーク的に遠く離れている場合、長い時間がかかる可能性があります。しかし、QUIC は安全なセッションを確立するために必要なハンドシェイクは 1 回だけです。
また、TCP は、ファイアウォールやネットワーク アドレス変換 (NAT) デバイスなど、無数のさまざまなミドルボックスによって理解され、操作されます。 QUIC は UDP を基盤として使用して、企業またはパブリック ネットワークでのパケット フローを許可し、メタデータを含めて完全に暗号化されるため、ミドルボックスはその詳細を検査または操作できなくなります。
HTTP/3 ストリームは個別に多重化され、リクエストとレスポンス間のヘッドオブライン ブロッキングを排除します。これは、HTTP/2 over TCP のようなアプリケーション層ではなく、トランスポート層でストリームの多重化が行われるため可能です。これにより、特に低速のネットワークや遅延の影響を受けやすい接続で、Web アプリケーションの実行速度が向上します。
- QUICを使用している = RFCドラフト「Hypertext Transfer Protocol(HTTP) over QUIC」を使用している。
- QUICは、Googleによって開発された実験的なトランスポート層プロトコルです。
- HTTP/2とHTTP/3の通信の動作は、下記の通り。
※出典: New – HTTP/3 Support for Amazon CloudFront
なぜHTTP/3で、通信速度が速くなるのか
- 接続確立時のハンドシェイク数の減少
- HTTP/2では、TCPを使用している。TCPでは信頼性確保のためスリーウェイハンドシェイクが必須になっており、通信の状態を確認するために3回の通信が必要になりオーバヘッドが多い。
- HTTP/3では、1度のスリーウェイハンドシェイクにより通信が確保され暗号化されれば、その後のハンドシェイクは不要になる。
- ヘッドオブラインブロッキングの解消
- 従来、UDPはTCPよりも信頼性が低く、手続きは簡単、リアルタイム処理向きとされていた。
- HTTP/3では、TCPではなくUDPを採用しTCP特有のヘッドオブブロッキングを回避しつつ、通信の信頼性を担保するためのデータの再送要求や、パケットロス対策が施されている。
- パケットロスが発生しても、各パケットのデータ転送は止まらず、ロスのあったパケットのみ再送される。
- HTTP/2では、ヘッダー圧縮にHPACKという仕様が使われてきた。TCPの手続きに合わせた仕様であり、HTTP/3ではこれがQPACKというUDPやHTTP/3に合わせた新しい仕様でヘッダーの圧縮を効率化している。
- 優先度制御の再設計
- HTTP/2では、複数のHTTPリクエストを処理しリクエスト処理の優先度制御が取り入れられており、画像やCSSなどどのような順番で読み込むかといった制御が可能であった。しかし、この優先度制御を行うために使用されている順序ツリーは複雑でブラウザにより、表示速度や表示順に違いが生まれていた。
- HTTP/3では、拡張仕様としてヘッダーに優先度を明確に指示ができるようになっている。
- これにより、ファーストビューを優先的に制御できる。
HTTP/3を利用するための条件
- クライアントとサーバがHTTP/3に対応していること
- サーバがTLS1.3が利用できることが必要。
- クライアントは最近のブラウザを使っていれば良さそう。
- NWでは、クライアントとサーバの両方でUDPの443ポートが開放されている必要がある。
- TCPはあるがUDPはまだそれほど多くなさそう。
- ファイアウォールやセキュリティソフトなどでUDP443の利用を許可すること
- UDPは、DDoSなど使われることもありセキュリティルールによりポート開放されていない場合もある。
HTTP/3による通信ができない場合でも、従来のTCPを使ったHTTP/2や1の通信は可能とのこと。
考察
HTTP/3の採用により、通信速度が向上するサイトが増え、利用側としても気づかずに恩恵が受けられそうです。
Googleさんのように、このような基礎的な技術に貢献している方たちに感謝です。
参考