Bootstrapping WebSockets with HTTP/3 の仕様

既存の仕様ではHTTP/3上でWebSocketは使うことができません。

そこで、HTTP/3でWebSocketを使えるようにする「Bootstrapping WebSockets with HTTP/3」という仕様が、GoogleのRyan Hamilton氏によって提案されています。

背景: HTTP/2とWebSocekt

もともと、HTTP/2でWebSocketを使うためにRFC 8441「Bootstrapping WebSockets with HTTP/2」という仕様があります。この仕様では、一つのストームをWebSocket通信として使うために、:protocol 疑似ヘッダやSETTINGSパラメータを導入しています。
asnokaze.hatenablog.com

Bootstrapping WebSockets with HTTP/3

この仕様自体は、RFC 8441「Bootstrapping WebSockets with HTTP/2」の仕組みを同様にHTTP/3に導入するものです。

この仕様は、RFC 8441で導入されたExtended CONNECTメソッドと、SETTINGSパラメータをHTTP/3に導入する単純な仕様になっています。

感想

WebSocket over HTTP/3では、単純にHTTP/3に乗せるだけでも、ストリームを超えたHoLBがなくなったり、コネクションマイグレーションに対応できるといったメリットがあるものと思います。

別の議論として、HTTP/3の利点を活かす、JavaScript APIの変更も含めたWebTransportという仕様が提案されています。このWebSocket over HTTP/3では、WebTransportが提供する単方向ストリームや再送を要求しないデータ通信(DATAGRAM)といった機能は使えません。一方で、既存のWebSocketのAPIを流用するため既存のアプリケーションでもそのまま動作するものと思います。

また、現在 WebTransportやMASQUEの文脈でHTTPセマンティクスにおける、CONNECT拡張について議論が行われている最中です。そこの部分整理があるかもしれません。

(あとは、Bootstrapping WebSockets with HTTP/2から単純にマップ出来ないところがありそうな気はしている。エラーコード周りとか。)