WWDC21で、「Accelerate networking with HTTP/3 and QUIC」という発表がありました。
iOS15、MacOS Monterey からHTTP/3とQUICが利用可能になるらしく、HTTPの進化、HTTP/3の使い方、QUICの使い方の紹介が取り上げられていました。
気になったスライドをピックアップしてまとめてみました。
Evolution of HTTP
ここでは、HTTP/1.1、HTTP/2、HTTP/3の進化を典型的なWebページの表示(index.html, logo.png, style.css)のダウンロードにかかる時間の改善によって表しています。HTTP/1.1→HTTP/2ではストリームの多重化によって、logo.png, style.cssをリクエストするタイミングが早くなっていることが分かります。 またHTTP/2→HTTP/3では接続までの時間が改善されていることが分かります。
この図では、HTTP/2とHTTP/3の違いをパケットロスなどによるHoL Blockingによって表しています。HTTP/2は単一のTCPコネクション上で接続を多重化しているので、ストリーム毎ではなくコネクション上にあるすべてのストリームがブロックされることが分かります。一方で、HTTP/3はUDP上のQUICの接続を使うので、あるストリームがブロックされても他のストリームはブロックされません。
HTTP/3 Support
HTTP/3はURLSessionというAPIではデフォルトで使用可能になるらしいです。Swiftは詳しくないですが、特殊なコンフィギュレーションを設定しなくても使えるという意味ではないかと思います。
Swiftは詳しくないですが、ドキュメントにはすでに記載があるようでした。
URLSession supports the HTTP/1.1, HTTP/2, and HTTP/3 protocols. HTTP/2 support, as described by RFC 7540, requires a server that supports Application-Layer Protocol Negotiation (ALPN).
HTTP/3 service discovery
URLSessionでは、サーバーがHTTP/3に対応していることが分かると、HTTP/3での通信が可能になるらしいです。 HTTP/3で通信が可能かどうかについて確認する方法が紹介されています。 推奨される方法はDNSサーバーへの登録らしいです。
おそらく↓の記事で取り上げられている技術ではないかと思います。
また、assumesHTTP3Capableという、サーバーがHTTP/3をサポートしていると仮定することでスピードアップを図るAPIもあるようです。
New HTTP prioritization scheme
また、優先度制御についても紹介がありました。おそらくすでに実装済みのものだと思われます。 優先度の数字による設定や、画像などincrementalなダウンロードをするかどうかの設定が可能です。
HTTP/2の優先度制御には、正しく実装されていないなどの課題があり、HTTPのヘッダーを使った方式が提案されており、それを使っているようです。
具体的には3.1、3.2あたりに記述があります。
https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority-03#section-3.1
https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority-03#section-3.2
Using QUIC in your app
QUICのAPIが用意されて使用可能になります!
Multiplexing protocols
このあたりの話は、原稿を読んでもよくわかりませんでした。 おそらく、ストリームの扱い方についてなのではないかと思います。
QUIC Options
トランスポートパラーメータの設定もできるようです。ストリームをUnidirectionalにするなどのプロパティの設定も可能らしいです。
また、ストリームのメタデータの設定もできるようです。
Debugging QUIC
qlogという、QUICのログを保存するための仕組みにも対応しています。 qlogを使用することで、wiresharkなどでパケットキャプチャするよりもさらに細かいレベルでのデバッグなどが可能になります。 最適化がかなりはかどると思います。
現状標準化中で、WGのドラフトになったというのを最近見かけた気がします。
qlogについては自分が書いた紹介の記事がいくつかあるので興味があればそちらも見ていただけるとよいかもしれません。
Next steps
プレゼンは、「HTTP/3サーバーを使えるようにしよう!」、「カスタムプロトコルをQUIC上で実装しよう!」という二つのメッセージで締めています。
所感
Appleのような開発者の多いプレイヤーがHTTP/3やQUICのサポートを開始するというのは大きいニュースではないかと思います。
QUICはまだ標準化が終わったばかりで最適に使うにはどのようにすればよいのかという話はこれからの話題だと思います。Appleのサポートによって開発者が増えると、どうやって最適化を行うのかという話題が増えると思います。今から楽しみです。