メインコンテンツまでスキップ

5. フィールド構文 (Field Syntax)

各フィールド行は、大文字小文字を区別しないフィールド名、コロン (":")、オプションの先頭空白、フィールド行の値、およびオプションの末尾空白で構成されます。

field-line   = field-name ":" OWS field-value OWS

フィールド値内での解析規則は、[HTTP] の第 5.5 節で定義されています。このセクションでは、HTTP/1.1 メッセージ内でのヘッダーフィールドの包含と、HTTP/1.1 メッセージからのヘッダーフィールドの抽出に関する汎用構文について説明します。

5.1. フィールド行の解析 (Field Line Parsing)

メッセージは、個々のフィールド名に依存しない汎用アルゴリズムを使用して解析されます。特定のフィールド行の値内のコンテンツは、メッセージ解釈の後の段階 (通常、メッセージのフィールドセクション全体が処理された後) まで解析されません。

フィールド名とコロンの間に空白は許可されていません。過去には、そのような空白の処理の違いが、リクエストルーティングとレスポンス処理におけるセキュリティ脆弱性につながっていました。サーバーは、ヘッダーフィールド名とコロンの間に空白を含む受信したリクエストメッセージを、400 (Bad Request) のレスポンスステータスコードで拒否しなければなりません (MUST)。プロキシは、メッセージを下流に転送する前に、レスポンスメッセージからそのような空白を削除しなければなりません (MUST)。

フィールド行の値の前および/または後にオプションの空白 (OWS) が付く場合があります。人間による一貫した読みやすさのために、フィールド行の値の前に単一の SP が推奨されます。フィールド行の値には、その先頭または末尾の空白は含まれません: フィールド行の値の最初の非空白オクテットの前、またはフィールド行の値の最後の非空白オクテットの後に発生する OWS は、フィールド行からフィールド行の値を抽出する際にパーサーによって除外されます。

5.2. 廃止された行折り返し (Obsolete Line Folding)

歴史的に、HTTP/1.x フィールド値は、各追加行の前に少なくとも 1 つのスペースまたは水平タブを付けることで、複数行にわたって拡張できました (obs-fold)。本仕様書は、"message/http" メディアタイプ (第 10.1 節) 内を除いて、そのような行折り返しを非推奨とします。

obs-fold     = OWS CRLF RWS
; 廃止された行折り返し

送信者は、"message/http" メディアタイプ内でのパッケージを目的としたメッセージでない限り、行折り返しを含むメッセージ (つまり、obs-fold 規則に一致するフィールド行の値を持つメッセージ) を生成してはなりません (MUST NOT)。

"message/http" コンテナ内にない リクエストメッセージで obs-fold を受信するサーバーは、廃止された行折り返しが受け入れられないことを説明する表現を含む 400 (Bad Request) を送信してメッセージを拒否するか、フィールド値を解釈またはメッセージを下流に転送する前に、受信した各 obs-fold を 1 つ以上の SP オクテットで置き換えなければなりません (MUST)。

"message/http" コンテナ内にないレスポンスメッセージで obs-fold を受信するプロキシまたはゲートウェイは、メッセージを破棄し、受け入れられない行折り返しを受信したことを説明する表現を含む 502 (Bad Gateway) レスポンスで置き換えるか、フィールド値を解釈またはメッセージを下流に転送する前に、受信した各 obs-fold を 1 つ以上の SP オクテットで置き換えなければなりません (MUST)。

"message/http" コンテナ内にないレスポンスメッセージで obs-fold を受信するユーザーエージェントは、フィールド値を解釈する前に、受信した各 obs-fold を 1 つ以上の SP オクテットで置き換えなければなりません (MUST)。