Cloudflareのhttp/3実装が目についたので、とりあえずサンプルサーバを動かしてみました
HTTP/3について
IETFでHTTP/3の標準化が進められています。
現在はdraft-19が出ているところです。
https://tools.ietf.org/html/draft-ietf-quic-http-19
QUIC及びHTTP/3について別途まとめましたので、参考にして頂ければ
各社QUIC, HTTP/3実装状況
簡単に他の実装状況にも触れます。
IETF QUIC, HTTP/3 は標準化を進めるとともに各社が実装を持ち寄って相互接続性テストを行っています。
今は「11th Implementation Draft」での接続テストを行っています。下の図は実装同士で接続テストをし、動作確認がとれたものが書かれている表になります。3と書かれているのがHTTP/3の実装が行われているものになります。
Cloudflare quiche
quicheはCloudflareのQUIC, HTTP/3のRUST実装です。ちなみに現在は、draft 18の実装になっています。
(Googleも同名の実装を持っていて紛らわしい)
先日、HTTP/3実装がmasterにマージされたのでexampleのサーバ・クライアントを試しに動かしてみました
Build
READMEに書いてあるとおり
# 準備
$ apt-get install cmake
$ curl https://sh.rustup.rs -sSf | sh # 適宜PATH通してcargo使えるように
$ git clone https://github.com/cloudflare/quiche.git
$ cd ./quiche
quiche$ git submodule update --init
quiche$ cargo build --examples
動作確認
server
デフォルトでポート4433でリッスンします。証明書や鍵はexamplesに含まれているため指定は不要です
quiche$ quiche$ mkdir ./examples/root
quiche$ echo 'It works!!' > ./examples/root/index.html
quiche$ target/debug/examples/http3-server
client
quiche$ target/debug/examples/http3-client https://localhost:4433/index.html
It works!!
wireahark
Clientがデフォルトの version=babababa
で接続しにいったあとVersion Negotiationパケットが返ってきて改めてdraft-18
で接続しに行ってる様子や、Handshakeパケットのあとにショートヘッダパケットが送受信されている様子が見えます。