HEADERS

HEADERS フレーム (HTTP)

[40] HEADERS フレームは、最初のヘッダーブロック素片を表します。

仕様書

意味

[2] HEADERS フレーム (フレーム型 0x1) は、ストリームを開き、 header block fragment を伝送するものです >>1

構文

[18] ストリーム識別子欄は、フレームを関連付けるストリームを表します。 ストリームに関連付けなければなりません >>1ストリーム識別子 0x0 を指定することはできません。

選択方法は、ストリーム識別子を参照。

[11] 次のフラグがあります。

[12] END_STREAM (0x1 = 第0ビット)
設定されていれば、送信者が当該ストリームで送信する最後のフレームであることを表します >>1。 ただし設定されていても、 CONTINUATION フレームは同じストリームで続いて送信できます >>1
[14] END_HEADERS (0x4 = 第2ビット)
設定されていれば、header block 全体が含まれており CONTINUATION フレームが次に来ないことを表します >>1[13] END_HEADERS フラグが設定されていなければ、 同じストリームCONTINUATION フレームが来なければなりません>>1
[16] PADDED (0x8 = 第3ビット)
設定されていれば、詰め長詰めの欄が存在することを表します >>1
[17] PRIORITY (0x20 = 第5ビット)
排他的 (E) フラグ、ストリーム依存性の欄、重みの欄が存在することを表します。 >>1

[28] 他のフラグは、0 でなければなりません受信者は、無視しなければなりません>>27

width
8
  1. 1 END_STREAM
  2. 1 0
  3. 1 END_HEADERS
  4. 1 PADDED
  5. 1 0
  6. 1 PRIORITY
  7. 1 0
  8. 1 0

[4] payload は次の欄で構成されます。

[5] 詰め長 (Pad Length)
詰めの長さをバイト単位で表す8ビット欄です。 この欄は PADDED フラグが設定されている時のみ存在します。 >>1 値は0でも構いません。値が実際の詰めの長さを超えることは禁止されていませんが、 当然正しく処理できませんし、payload から固定長の部分の長さを引いた長さを超えるなら接続エラーとなります。
[6] E (排他的 (Exclusive) )
ストリーム依存性排他的かどうかを表す1ビットのフラグです。 PRIORITY フラグが設定されている時だけ存在します。 >>1
[7] ストリーム依存性 (Stream Dependency)
ストリームが依存するストリームストリーム識別子を表す31ビットの欄 (ネットワークバイト順 >>26) です。 PRIORITY フラグが設定されている時だけ存在します。 >>1
[8] 重み (Weight)
ストリーム優先度重みを表す符号無し8ビット整数です。 重みは 1 以上 256 以下で、ここで指定するのはそれより 1 小さい値です。 PRIORITY フラグが設定されている時だけ存在します。 >>1
[9] ヘッダーブロック素片 (Header Block Fragment)
ヘッダーブロック素片です >>1payload の残りの部分です。
[10] 詰め (Padding)
詰めバイト列です >>1。 詰めメッセージの長さを隠すためのセキュリティー機能です >>23送信者は、すべて 0 のオクテットにしなければなりません >>23。 詰め長の長さより、詰めの最大長は、255バイトです。

width
32
  1. 8 詰め長
  2. 1 E
  3. 31 ストリーム依存性
  4. 8 重み
  5. 48... header block fragment
  6. 32... 詰め

文脈

[3] HEADERS フレームは、ストリームの状態が idle, reserved (local), open, half-closed (remote) のいずれかの時に送信できます >>1

[33] HEADERS フレームidle 状態のストリームで送信すると、 open 状態に遷移します >>31END_STREAM フラグも設定されていれば、そのまま更に half-closed (local) 状態に遷移します >>31

[34] HEADERS フレームreserved (local) 状態のストリームで送信すると、 half-closed (remote) 状態に遷移します >>31

[36] END_STREAM フラグが設定されている HEADERS フレームopen 状態のストリームで送信すると、 half-closed (local) 状態に遷移します >>31

[39] END_STREAM フラグが設定されている HEADERS フレームhalf-closed (remote) 状態のストリームで送信すると、 closed 状態に遷移します >>31

処理

[19] 受信者は、ストリーム識別子0x0 なら、 接続エラー PROTOCOL_ERROR としなければなりません >>1

[30] 受信者は、payload が短すぎるか、設定 SETTINGS_MAX_FRAME_SIZE より長いなら、接続エラー FRAME_SIZE_ERROR としなければなりません >>29

[25] 受信者は、詰め長が payload から固定長の部分を除いた長さより大きければ、 接続エラー PROTOCOL_ERROR としなければなりません >>1

[24] 受信者は、詰めに 0 以外があれば接続エラー PROTOCOL_ERROR としても構いません。 >>23

[15] END_HEADERS フラグが設定されていて次のフレームCONTINUATION フレーム以外だったり、 他のストリームだったりした場合は、接続エラー PROTOCOL_ERROR としなければなりません >>1

[32] HEADERS フレームidle 状態のストリームで受信すると、 open 状態に遷移します >>31END_STREAM フラグも設定されていれば、そのまま更に half-closed (remote) 状態に遷移します >>31

[35] HEADERS フレームreserved (remote) 状態のストリームで受信すると、 half-closed (local) 状態に遷移します >>31END_STREAM フラグも設定されていれば、そのまま更に closed 状態に遷移します >>31

[37] END_STREAM フラグが設定されている HEADERS フレームopen 状態のストリームで受信すると、 half-closed (remote) 状態に遷移します >>31

[38] END_STREAM フラグが設定されている HEADERS フレームhalf-closed (local) 状態のストリームで受信すると、 closed 状態に遷移します >>31

[20] HTTPストリームの状態遷移の項、ヘッダーリストの項を参照。