メインコンテンツまでスキップ

1. はじめに (Introduction)

QUICトランスポートプロトコル (QUIC Transport Protocol, [QUIC-TRANSPORT]) は、HTTPセマンティクスをサポートするように設計されており、その設計はHTTP/2 ([HTTP/2]) の多くの機能を包含しています。HTTP/2は、ヘッダーおよびトレーラーセクションの圧縮にHPACK ([RFC7541]) を使用します。HPACK がHTTP/3 ([HTTP/3]) で使用された場合、すべてのストリーム上のフレーム間の全順序付けという組み込みの仮定により、フィールドセクション (Field Section) にヘッドオブラインブロッキング (Head-of-Line Blocking) が発生します。

QPACKは、HPACKのコア概念を再利用しますが、順序付けられていない配信の存在下で正確性を保つように再設計されており、実装がヘッドオブラインブロッキングに対する耐性と最適な圧縮率の間でバランスを取る柔軟性を提供します。設計目標は、同じロス条件下で、大幅に少ないヘッドオブラインブロッキングでHPACKの圧縮率に近づくことです。

1.1 規約と定義 (Conventions and Definitions)

本文書のキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY"、および "OPTIONAL" は、BCP 14 [RFC2119] [RFC8174] に記載されているように解釈されるものとします (MAY, およびOPTIONALは、ここに示すように、すべて大文字で表記される場合に限ります)。

本文書では、以下の用語が使用されます:

HTTPフィールド (HTTP fields): HTTPメッセージの一部として送信されるメタデータ。この用語は、ヘッダーフィールドとトレーラーフィールドの両方を包含します。通俗的に、「ヘッダー」という用語は、HTTPヘッダーフィールドとトレーラーフィールドを指すためにしばしば使用されてきました; 本文書では、一般性のために「フィールド」を使用します。

HTTPフィールドライン (HTTP field line): HTTPフィールドセクションの一部として送信される名前と値のペア。[HTTP] の第6.3節および第6.5節を参照してください。

HTTPフィールド値 (HTTP field value): フィールド名に関連付けられたデータであり、そのセクション内のそのフィールド名を持つすべてのフィールドライン値から構成され、カンマ区切り文字で連結されます。

フィールドセクション (Field section): HTTPメッセージに関連付けられたHTTPフィールドラインの順序付けられたコレクション。フィールドセクションは、同じ名前の複数のフィールドラインを含むことができます。また、重複したフィールドラインを含むこともできます。HTTPメッセージには、ヘッダーセクションとトレーラーセクションの両方を含めることができます。

表現 (Representation): 動的テーブルおよび静的テーブルへの参照によってフィールドラインを表現する命令。

エンコーダー (Encoder): フィールドセクションをエンコードする実装。

デコーダー (Decoder): エンコードされたフィールドセクションをデコードする実装。

絶対インデックス (Absolute Index): 動的テーブル内の各エントリの一意のインデックス。

ベース (Base): 相対インデックスおよびPost-Baseインデックスの基準点。動的テーブルエントリを参照する表現は、ベースを基準とします。

挿入カウント (Insert Count): 動的テーブルに挿入されたエントリの総数。

なお、QPACKは名前であり、略語ではありません。

1.2 表記規則 (Notational Conventions)

本文書の図は、[RFC2360] の第3.1節で説明されている形式を使用し、以下の追加規則があります:

x (A): xがAビット長であることを示します。

x (A+): xが第4.1.1節で定義されているプレフィックス整数エンコーディングを使用し、Aビットのプレフィックスで始まることを示します。

x ...: xが可変長であり、領域の終わりまで延びることを示します。