get, decode, and split

# (HTTP)

[1] HTTPのABNF# は、リストを表します。

[22] HTTP とか SIP とかだと、複数頭領域を読点区切りで単一頭領域にまとめることが 出来ます。

仕様書

構文

[3] ABNF において反復を表す * のように、構文要素の直前に # を置くと、リストを表します >>2

[4] # の前後には、非負整数を指定でき、それぞれ最小と最大の一致数を表します >>2。 省略された場合は、それぞれ 0 を表します。

  1. ?
    1. ASCII数字1つ以上
  2. #
  3. ?
    1. ASCII数字1つ以上
  4. 構文要素

意味

[5] # の直後の構文要素が、指定されている最小数以上、最大数以下の回数繰り返すことを表します。 ただし、それぞれの間には , が必要で、更にその前後には OWS が認められています >>2

[6] 送信者は、 >>5一致するものを生成しなければなりません >>2

[7] 受信者は、それに加えて、空の要素があっても (合理的な範囲で) 無視しなければなりません >>2。すなわち、リストの最初や最後に , があったり、 , が連続したり (間に OWS のみしかなかったり) していても構いません。 その場合で、空でない要素の数が指定された範囲内になければなりません >>2

処理

[19] 同じ名前の複数の HTTPヘッダーが与えられた場合と、 それが連結された場合とで処理が変わってくる場合があります。

[20] Chrome開発者ツールServer-Timing ヘッダーの内容を図示します。 複数のヘッダーで記述されていれば、そのどれかが構文エラーで表示されなくても、 他のヘッダーが正常ならそちらは表示されます。 ところが連結されているとすべて (エラー以降?) が表示されなくなったりします。

[21] 連結は思わぬところで発生します。 例えばサービスワーカー経由で文書環境に伝わるとき、 サービスワーカー内でヘッダーを処理したタイミングで発生していたりします。 Chrome開発者ツールでみていると、 サービスワーカーfetch では図示されているのに大元の文書環境側の fetch では図示されていない、みたいな不思議現象として現れます。

文脈

[23] まとめられる頭領域:

関連

[8] 欄値# によって定義されているかどうかは、同名のヘッダーが複数あってもよいかどうかを左右します。 詳しくはHTTPヘッダーの項を参照してください。

歴史

[24] RFC 2616 HTTP/1.1 4.2 から抜粋
   Multiple message-header fields with the same field-name MAY be
   present in a message if and only if the entire field-value for that
   header field is defined as a comma-separated list [i.e., #(values)].
   It MUST be possible to combine the multiple header fields into one
   "field-name: field-value" pair, without changing the semantics of the
   message, by appending each subsequent field-value to the first, each
   separated by a comma. The order in which header fields with the same
   field-name are received is therefore significant to the
   interpretation of the combined field value, and thus a proxy MUST NOT
   change the order of these field values when a message is forwarded.

[9] Stop using "combined value" (annevk著, ) https://github.com/whatwg/xhr/commit/0d4253c784d2b71ca5bf6648c67f95b82bb8b239

[10] Stop using "combined value" by annevk · Pull Request #229 · whatwg/xhr () https://github.com/whatwg/xhr/pull/229

[11] Fix: Appending a header to headers with "request-no-cors" guard by yutakahirano · Pull Request #840 · whatwg/fetch () https://github.com/whatwg/fetch/pull/840

[12] Remove "combined value" concept (yutakahirano著, ) https://github.com/whatwg/fetch/commit/8324d0a8192ce4b48de512d714726fe06fb92851

[13] Remove "combined value" concept by yutakahirano · Pull Request #842 · whatwg/fetch () https://github.com/whatwg/fetch/pull/842

[14] Define the Content-Type header parser (annevk著, ) https://github.com/whatwg/fetch/commit/0b2bc05b2550dcbefe1321ea3e8026702514a798

[15] "Extract a MIME type" algorithm should pick the first entry? · Issue #529 · whatwg/fetch () https://github.com/whatwg/fetch/issues/529

[16] Define the Content-Type header parser by annevk · Pull Request #831 · whatwg/fetch () https://github.com/whatwg/fetch/pull/831

[17] Fix: Appending a header to headers with "request-no-cors" guard by yutakahirano · Pull Request #840 · whatwg/fetch () https://github.com/whatwg/fetch/pull/840

[18] CORS request-header Content-Type check should be on a combined value · Issue #748 · whatwg/fetch () https://github.com/whatwg/fetch/issues/748