Microsoftはこのほど.NET Blogの記事「HTTP/3 support in .NET 6」で、今年11月にリリース予定の.NET 6におけるHTTP/3のサポートについて解説を行った。HTTP/3は、現在IETF(Internete Engineering Task Force)によって策定が進められているHTTP/2に続く次世代の通信規格である。.NET 6には、HTTP/3のプレビューサポートが含まれる予定となっている。

記事によれば、.NET 6におけるHTTP/3のプレビューサポートには次の要素が含まれるという。

  • Kestrel WebサーバにおけるHTTP.SysおよびIIS for ASP.NET経由のHTTP/3サポート
  • HTTP/3クライアント
  • HTTP/3を利用したgRPC

HTTP/3はベースレイヤーとして「QUIC」と呼ばれる通信プロトコルを使用するが、.NETではこのQUICの実装としてMicrosoftがオープンソースで開発している「MSQuic」というクロスプラットフォームライブラリが利用される。MSQuicには標準のQUICと違ってTLS暗号化機能が組み込まれており、接続を確立するプロセスにTLSハンドシェイクが含まれるという特徴がある。

そのため、MSQuicで使用されるTLSライブラリはTLSハンドシェイクをサポートするAPIを提供している必要がある。このAPIは、WindowsではSChannel/Bcrypt.dllに含まれ、LinuxのではOpenSSLのフォークである「QuicTLS」として提供されるという。

パッケージングの理由から、Windows版の.NET 6にはMSQuicが含まれているが、Linux版では個別のパッケージとして提供されるとのことだ。macOS版にはHTTP/3のサポートは含まれない。これは、macOS版の.NET 6でTLS実装として使用されるSecureTransportが、QUICハンドシェイクをサポートするためのTLS APIを含んでいないためだという。

また、.NET QUIC APIについては.NET 6の時点では公開しない予定で、.NET 7での公開を目指すとのこと。.NET 7ではQUICとHTTP/3に対するさらなる投資を予定しており、プレビュー版で試せるようになるのを楽しみにしていてほしいとつづられている。

  • HTTP/3 support in .NET 6 - .NET Blog

    HTTP/3 support in .NET 6 - .NET Blog