6. バイナリ形式 (Binary Format)
本節では、第2.4節で説明されたすべての表現の詳細なバイナリ形式について説明します。
6.1. インデックス付きヘッダーフィールド表現 (Indexed Header Field Representation)
インデックス付きヘッダーフィールド表現は、静的テーブルまたは動的テーブルのいずれかのエントリを識別します (第2.3節参照)。
インデックス付きヘッダーフィールドは、'1' 1ビットパターンで始まり、その後に一致するヘッダーフィールドのインデックスが続きます。インデックスは7ビットプレフィックスを持つ整数として表現されます (第5.1節参照)。
インデックス値0は使用されません。インデックス付きヘッダーフィールド表現で見つかった場合、デコーディングエラーとして扱わなければなりません (MUST)。
6.2. リテラルヘッダーフィールド表現 (Literal Header Field Representation)
リテラルヘッダーフィールド表現には、リテラルヘッダーフィールド値が含まれます。ヘッダーフィールド名は、リテラルとして、または静的テーブルまたは動的テーブル (第2.3節参照) のいずれかの既存のテーブルエントリへの参照によって提供されます。
本仕様は、3つの形式のリテラルヘッダーフィールド表現を定義しています: 増分インデックス付き、インデックスなし、および永久にインデックス化されない。
6.2.1. 増分インデックス付きリテラルヘッダーフィールド (Literal Header Field with Incremental Indexing)
増分インデックス付きリテラルヘッダーフィールド表現は、デコードされたヘッダーリストにヘッダーフィールドを追加し、動的テーブルに新しいエントリとして挿入することになります。
増分インデックス付きリテラルヘッダーフィールド表現は、'01' 2ビットパターンで始まります。
ヘッダーフィールド名が静的テーブルまたは動的テーブルに格納されているエントリのヘッダーフィールド名と一致する場合、ヘッダーフィールド名はそのエントリのインデックスを使用して表現できます。この場合、エントリのインデックスは6ビットプレフィックスを持つ整数として表現されます (第5.1節参照)。この値は常に非ゼロです。
それ以外の場合、ヘッダーフィールド名は文字列リテラルとして表現されます (第5.2節参照)。6ビットインデックスの代わりに値0が使用され、その後にヘッダーフィールド名が続きます。
ヘッダーフィールド名表現のいずれかの形式の後に、文字列リテラルとして表現されたヘッダーフィールド値が続きます (第5.2節参照)。
6.2.2. インデックスなしのリテラルヘッダーフィールド (Literal Header Field without Indexing)
インデックスなしのリテラルヘッダーフィールド表現は、動的テーブルを変更せずに、デコードされたヘッダーリストにヘッダーフィールドを追加することになります。
インデックスなしのリテラルヘッダーフィールド表現は、'0000' 4ビットパターンで始まります。
6.2.3. 永久にインデックス化されないリテラルヘッダーフィールド (Literal Header Field Never Indexed)
永久にインデックス化されないリテラルヘッダーフィールド表現は、動的テーブルを変更せずに、デコードされたヘッダーリストにヘッダーフィールドを追加することになります。中間者は、このヘッダーフィールドをエンコードするために同じ表現を使用しなければなりません (MUST)。
永久にインデックス化されないリテラルヘッダーフィールド表現は、'0001' 4ビットパターンで始まります。
ヘッダーフィールドが永久にインデックス化されないリテラルヘッダーフィールドとして表現される場合、常にこの特定のリテラル表現でエンコードされなければなりません (MUST)。特に、ピアが永久にインデックス化されないリテラルヘッダーフィールドとして表現されたヘッダーフィールドを受信したとき、同じ表現を使用してこのヘッダーフィールドを転送しなければなりません (MUST)。
この表現は、圧縮することによってリスクにさらされないヘッダーフィールド値を保護することを目的としています (詳細については第7.1節を参照)。
6.3. 動的テーブルサイズ更新 (Dynamic Table Size Update)
動的テーブルサイズ更新は、動的テーブルのサイズの変更を通知します。
動的テーブルサイズ更新は、'001' 3ビットパターンで始まり、その後に新しい最大サイズが続きます。これは5ビットプレフィックスを持つ整数として表現されます (第5.1節参照)。
新しい最大サイズは、HPACKを使用するプロトコルによって決定される制限以下でなければなりません (MUST)。この制限を超える値は、デコーディングエラーとして扱わなければなりません (MUST)。HTTP/2では、この制限はデコーダーから受信し、エンコーダーによって確認されたSETTINGS_HEADER_TABLE_SIZEパラメータの最後の値です ([HTTP2]の第6.5.2節および第6.5.3節参照)。
動的テーブルの最大サイズを削減すると、エントリが削除される可能性があります (第4.3節参照)。