QUIC ストリームと HTTP/3
HTTP/2 では完全なストリームと多重化のコンセプトを TCP 上で独自に設計する必要がありました。
一方 HTTP/3 は QUIC 用に作られたので、QUIC のストリームを最大限に活用することができます。
HTTP/3 を介して行われる HTTP リクエストはストリームの特定のセットを利用します。
HTTP/3 フレーム
HTTP/3 はつまり QUIC ストリームを作成し、フレームのセットを通信先の相手へ送信することを意味します。
HTTP/3 にはいくつかの (2018年12月18日の時点では9個!) フレームが存在します。中でも最も重要なものは次のとおりです:
HEADERS 圧縮された HTTP ヘッダを送信
DATA バイナリデータを送信
GOAWAY このコネクションをシャットダウンしてください
HTTP リクエスト
クライアントは、自身が開始した 双方向 QUIC ストリーム上で HTTP リクエストを送信します。
1つのリクエストは1つの HEADERS フレームで構成され、場合によっては他に1、2つのフレームが続きます: 一連の DATA フレーム、またはトレーラー用の 最後の HEADERSリクエストを送信した後、クライアントはストリームを閉じます。
HTTP レスポンス
サーバーは、HTTP レスポンスを双方向ストリーム上で返します。
一連の DATA フレーム、またはトレーラー HEADERS フレームからなる1つの HEADERS フレーム。
QPACK ヘッダ
HEADERS フレームには QPACK アルゴリズムにより圧縮された HTTP ヘッダが含まれています。
QPACK は HTTP/2 で使われている HPACK 圧縮 (RFC7541) と似ていますが、送信されるストリームの順序に関わらず動作するように変更されています。
QPACK は エンドポイント間で2つの単方向 QUIC ストリームを加えて利用します。
これらのストリームは動的なテーブル情報をそれぞれ伝えるために使われます。
Last updated