6.4. コンテンツ
HTTP メッセージはしばしばメッセージの content として完全または部分的な表現を転送します:これはヘッダセクションの後にフレーミングで区切られたオクテットのストリームです。
この抽象的なコンテンツ定義は、メッセージフレーミングから抽出された後のデータを反映します。例えば、HTTP/1.1 のメッセージボディは(chunked transfer coding による)データチャンクのシーケンス、長さ 0 のチャンク、およびトレーラセクションで構成されるかもしれませんが、その同じメッセージの content はトランスファーコーディングがデコードされた後のデータストリームのみを含み、チャンク長やチャンクフレーミング構文、トレーラフィールドは含みません(セクション 6.5参照)。
6.4.1. コンテンツの意味
リクエストにおけるコンテンツの目的はメソッドのセマンティクスによって定義されます(セクション 9)。
例えば、PUT リクエストのコンテンツ内の表現(セクション 9.3.4)は、リクエストが正常に適用された後の target resource の望ましい状態を表すのに対し、POST リクエストのコンテンツ内の表現(セクション 9.3.3)はターゲットリソースによって処理される情報を表します。
レスポンスでは、コンテンツの目的はリクエストメソッド、レスポンスのステータスコード(セクション 15)、およびそのコンテンツを記述するレスポンスフィールドによって定義されます。例えば、GET に対する 200 (OK) レスポンスのコンテンツは、メッセージ発信時点(セクション 6.6.1)に観測された target resource の現在の状態を表します。一方で POST に対する同じステータスコードのレスポンスのコンテンツは、処理結果または処理適用後のターゲットリソースの新しい状態を表すかもしれません。
GET に対する 206 (Partial Content) レスポンスのコンテンツは、選択された表現の単一部分またはその表現の複数部分を含むマルチパートメッセージボディのいずれかを含みます(セクション 15.3.7 を参照)。
エラーのステータスコードを持つレスポンスは通常、エラー状態を表すコンテンツを含み、そのコンテンツはエラー状態を説明し、解決のために推奨される手順を示します。
HEAD リクエストメソッド(セクション 9.3.2)へのレスポンスは決してコンテンツを含みません;関連するレスポンスヘッダーフィールドは、その値が GET リクエストに対する場合にどのようになるかのみを示します(セクション 9.3.1)。
CONNECT リクエストメソッドへの 2xx (Successful) レスポンスは、コンテンツを持つ代わりに接続をトンネルモードに切り替えます(セクション 9.3.6)。
すべての 1xx (Informational)、204 (No Content)、および 304 (Not Modified) のレスポンスはコンテンツを含みません。
その他すべてのレスポンスはコンテンツを含みますが、そのコンテンツは長さ 0 の場合があります。
6.4.2. コンテンツの識別
完全または部分的な表現がメッセージコンテンツとして転送される場合、送信者が識別子を供給したり、受信者がその特定の表現に対応するリソースの識別子を決定したりすることが望ましい場合があります。例えば、クライアントが「現在の天気報告」のリソースに対して GET リクエストを行うと、返されたコンテンツに特有の識別子(例: "weather report for Laguna Beach at 20210720T1711")を欲することがあります。これは、時間とともに表現が変化することが予想されるリソースからのコンテンツを共有またはブックマークする際に有用です。
リクエストメッセージの場合:
- リクエストに Content-Location ヘッダーフィールドがある場合、送信者はコンテンツが Content-Location フィールド値で識別されるリソースの表現であると主張します。ただし、そのような主張は他の手段で検証できない限り信用できません(本仕様では定義されていません)。その情報は改訂履歴リンクにとって有用である可能性はあります。
- それ以外の場合、コンテンツは HTTP によって識別されませんが、より具体的な識別子がコンテンツ自体に含まれることがあります。
レスポンスメッセージの場合、次の規則が順に適用され、一致が見つかるまで続きます:
- リクエストメソッドが HEAD であるか、レスポンスのステータスコードが 204 (No Content) または 304 (Not Modified) の場合、レスポンスにコンテンツはありません。
- リクエストメソッドが GET でレスポンスのステータスコードが 200 (OK) の場合、コンテンツは target resource の表現です(セクション 7.1)。
- リクエストメソッドが GET でレスポンスのステータスコードが 203 (Non-Authoritative Information) の場合、コンテンツは仲介者によって提供された target resource の潜在的に改変または拡張された表現です。
- リクエストメソッドが GET でレスポンスのステータスコードが 206 (Partial Content) の場合、コンテンツはターゲットリソースの表現の一部または複数の部分です。
- レスポンスに Content-Location ヘッダーフィールドがあり、そのフィールド値がターゲット URI と同じ URI を参照する場合、コンテンツはターゲットリソースの表現です。
- レスポンスに Content-Location ヘッダーフィールドがあり、そのフィールド値がターゲット URI と異なる URI を参照する場合、送信者はコンテンツが Content-Location フィールド値で識別されるリソースの表現であると主張します。ただし、そのような主張は他の手段で検証できない限り信用できません(本仕様では定義されていません)。
- それ以外の場合、コンテンツは HTTP によって識別されませんが、より具体的な識別子がコンテンツ自体に含まれることがあります。
5.6.5. コメント
一部の HTTP フィールドでは、コメントテキストを括弧で囲むことでコメントを含めることができます。コメントは、そのフィールド値定義の一部として "comment" を含むフィールドでのみ許可されます。