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