stream identifier

ストリーム識別子 (HTTP)

[21] ストリーム識別子 (stream identifier) は、 ストリーム接続中で一意に識別する整数です。 すべての HTTP/2 ストリームには、ストリーム識別子がちょうど1つだけ割り当てられます。

仕様書

意味

[2] ストリームは、符号無し31ビット整数で識別されます。 これをストリーム識別子 (stream identifier) といいます。 >>1

文脈

[15] フレームストリーム識別子 (Stream Identifier) 欄は、 ストリーム識別子符号無し31ビット整数 (ネットワークバイト順 >>14) として表したものです。 >>13

[16] 値としては、ストリーム識別子か、接続全体を表す 0x0 を指定できます。ただしフレーム型によっては、どちらかに限定されています。

フレーム型の項を参照。

[20] PUSH_PROMISE フレーム約束ストリームID欄には、 予約するストリームストリーム識別子を設定します。

[23] GOAWAY フレーム最終ストリームID欄には、 一部または全部を処理したストリームストリーム識別子を設定します。

特別な値

[3] ストリーム識別子 0x0 は、接続全体の制御メッセージに使います。 個々のストリームには使えません。 >>1, >>13

[12] ストリーム識別子 0x0 は、依存性としても使われます >>11

[24] GOAWAY フレーム最大ストリームID欄では、 該当するストリームが無い場合には、値として 0x0 を使います >>22

[4] HTTP/1.1 から Upgrade: h2c で切り替えた場合は、 HTTP/1.1要求に対する応答ストリーム 0x1 を使います >>1, >>47。切り替え完了後、クライアントでは half-closed (local) 状態となります >>1, >>47サーバーでは half-closed (remote) 状態となります >>47

割り当て

[5] クライアントが開始したストリームは、奇数を使わなければなりませんサーバーが開始したストリームは、偶数を使わなければなりません>>1

[6] 新しいストリームストリーム識別子は、 当該エンドポイントが開始したストリームのいずれよりも大きな値としなければなりません>>1

[9] ストリーム識別子は、再利用できません >>1

[10] ストリーム識別子が枯渇したら、新しい接続を開くしかありません。 サーバーは、 GOAWAY フレームを送信してクライアントに新しい接続を開くことを求めることができます。 >>1

処理

[7] 予期しないストリーム識別子を受信したら、接続エラー PROTOCOL_ERROR としなければなりません >>1

[18] ストリーム識別子が 0 のフレームに長さの問題があれば、 接続エラーとなります。

フレームを参照。

[8] 新しいストリーム識別子が最初に使われた時、 当該 peer が開始し未だ idle 状態にある、より小さなストリーム識別子ストリームは、 すべて暗示的に閉じられ (closed 状態となり) ます。 >>1

R ビット

[17] フレームの共通のヘッダー >>13PUSH_PROMISE フレーム >>19GOAWAY フレーム >>22 には、ストリーム識別子31ビットの直前に予約の R 欄1ビットがあります >>13, >>19。意味は定義されていません。

[26] WINDOW_UPDATE フレームにも予約の R 欄1ビットがあります >>25。その意味は定義されていません。 こちらはストリーム識別子の前ではありません。

[10] 送信者は、ヘッダーR 欄に 0 を設定しなければなりません >>3

[11] 受信者は、ヘッダーR 欄を無視しなければなりません >>3

[27] 送受信者に対する規定は、フレームR 欄にのみ存在しています。 その他の R 欄をどう扱うべきなのかは謎です。