3. 形式
[HTTP] のセクション 6 は HTTPメッセージの一般的な構造を定義し、これらのメッセージを異なる部分に構成します。この形式は、これらの部分がどのようにバイト列に構成されるかを説明します。高レベルでは、バイナリメッセージは以下で構成されます:
- フレーミング指示子 - メッセージがリクエストかレスポンスか、および後続のセクションがどのようにフォーマットされるかを説明する単一の整数
- レスポンスの場合 - 0個以上の情報レスポンス(それぞれにステータスコードとヘッダーセクション)
- 制御データ - リクエストメソッド/ターゲット(リクエストの場合)またはステータスコード(レスポンスの場合)
- ヘッダーセクション - 0個以上のヘッダーフィールド
- コンテンツ - 0個以上のバイトのシーケンス
- トレーラーセクション - 0個以上のトレーラーフィールド
- オプションのパディング - 任意の数のゼロ値バイト
すべての長さと数値は、[QUIC] のセクション 16 の可変長整数エンコーディングを使用してエンコードされます。
3.1. 既知長メッセージ
構築時に既知の長さを持つリクエストまたはレスポンスは、図1に示す形式を使用します。
3.2. 不定長メッセージ
各セクションの既知の長さをエンコードせずに構築されるリクエストまたはレスポンスは、不定長エンコーディングを使用します。
3.3. フレーミング指示子
フレーミング指示子は以下の値を取ります:
- 0 = 既知長のリクエスト
- 1 = 既知長のレスポンス
- 2 = 不定長のリクエスト
- 3 = 不定長のレスポンス
3.4. リクエスト制御データ
リクエストの制御データには、メソッド、スキーム、オーソリティ、パスが含まれます。
3.5. レスポンス制御データ
レスポンスの制御データは、可変長整数としてエンコードされたステータスコードで構成されます。
3.5.1. 情報ステータスコード
情報ステータスコード (1xx) は、最終レスポンスの前に0回以上出現できます。
3.6. ヘッダーおよびトレーラーフィールド行
各フィールド行は、長さプレフィックス付きの名前とそれに続く長さプレフィックス付きの値としてエンコードされます。フィールド名は小文字に変換する必要があります(MUST)。
3.7. コンテンツ
コンテンツは、既知長メッセージと不定長メッセージで異なる方法でエンコードされます。
3.8. パディングと切り捨て
任意の数のゼロ値バイトをメッセージにパディングとして追加できます。メッセージは特定の境界で切り捨てることができます。