[1] [DFN[[RUBYB[[[ヘッダー名]]]@en[header name]]]]
([DFN[[RUBYB[[[欄名]]]@en[field name]]]])
は、[[ヘッダー]]の構文と意味を識別する名前です。

[13] 厳密には[[ヘッダー名]]は[[ヘッダー]]の [CODE(HTTP)[[[:]]]] より前の部分で、
[CODE(HTTP)[[[:]]]] 自体は[[ヘッダー名]]の一部ではありませんが、
[[ヘッダー名]]であることを明確にするため [CODE(HTTP)@en[[[:]]]]
まで含めていることがよくあります。

[EG[
[14] 例えば[[ヘッダー]] [CODE(HTTP)@en[[[Content-Type:]] [[text/plain]]; [[charset]]=[[utf-8]]]]
では [CODE(HTTP)@en[[[Content-Type]]]] が[[ヘッダー名]]です。
[CODE(HTTP)@en[[[Content-Type:]]]] が[[ヘッダー名]]とされることもあります。
]EG]

* 仕様書

[REFS[
- [2] '''[CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#page-23>'''
- [15] [CITE[OData Version 4.0 Part 1: Protocol Plus Errata 01]] ([TIME[2014-09-04 16:00:00 +09:00]] 版) <http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html#_Toc393958665>
- [18] [CITE[UPnP Device Architecture 2.0]] ([TIME[2014-09-05 02:24:48 +09:00]] 版) <http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf#page=24>
- [20] [CITE[UPnP Device Architecture 2.0]] ([TIME[2014-09-05 02:24:48 +09:00]] 版) <http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf#page=48>
- [92] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-8.1.2>
- [21] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-10.3>
]REFS]

* 構文

[3] [[欄名]]は、[[字句]]とされています [SRC[>>2]]。

[FIG(railroad)[
= [[字句]]
]FIG]

[8] [[ヘッダー名]]は、[[ASCII大文字・小文字不区別]]です。

;; [9] [[ヘッダー]]も参照。

[95] [[HTTP/2]] の[[ヘッダー]]の名前としての[[ヘッダー名]]は、[[小文字]]に変換してから記述しなければ[['''なりません''']] [SRC[>>92]]。

* 文脈

[7] 次の[[ヘッダー]]や[[キャッシュ指令]]には、いくつかの[[ヘッダー名]]を指定できます。

[FIG(middle list)[
- [3] [CODE(HTTP)@en[[[Access-Control-Allow-Headers:]]]]
- [1] [CODE(HTTP)@en[[[Access-Control-Expose-Headers:]]]]
- [4] [CODE(HTTP)@en[[[Access-Control-Request-Headers:]]]]
- [2] [CODE(HTTP)@en[[[Connection:]]]]
- [6] [CODE(HTTP)@en[[[Vary:]]]]
- [CODE(HTTP)@en[[[Variant-Vary:]]]]
- [5] [CODE(HTTP)@en[[[Cache-Control:]] [[no-cache]]]]
- [CODE(HTTP)@en[[[Cache-Control:]] [[private]]]]
- [[拡張宣言]]
]FIG]

* 処理

[96] 構文上認められない[[ヘッダー名]] [SRC[>>101]] や[[大文字]]の[[ヘッダー名]] [SRC[>>92]]
を含む[[メッセージ]]は、[[奇形]]です。

[22] [[HTTP/2]] [[ヘッダー名]]に構文上認められない文字が含まれている場合、
[[メッセージ]]は[[奇形]]です [SRC[>>21]]。

[96] [[HTTP/2]] [[ヘッダー名]]に[[大文字]]が含まれている場合、
[[メッセージ]]は[[奇形]]です [SRC[>>92]]。

[23] 実際には [[Chrome]] は[[大文字]]を除く任意の[[バイト]]の0個以上の列を[[奇形]]でないと判断するようです。
(少なくても [[XHR]] では) その先頭と末尾の[[空白]]は、除去します。
名前が[[空バイト列]]の[[ヘッダー]]は、無視します。 [TIME[2015-10-10T15:07:51.400Z]]

[24] [[Firefox]] は[[大文字]]を除く任意の[[バイト]]の0個以上の列を[[奇形]]でないと判断するようです。
(少なくても [[XHR]] では) 名前が[[字句]]でない[[ヘッダー]]は、無視します。
(ただし名前に [CODE[[[:]]]] が含まれる[[ヘッダー]]の扱いは奇妙です。)
[TIME[2015-10-10T15:09:52.900Z]]

[25] [[Chrome]] も [[Firefox]] も、[[字句]]でなく[[大文字]]を含む場合、
[[奇形]]として扱います。 [TIME[2015-10-10T15:39:34.300Z]]

* 予約されているヘッダー名

[12] [CODE(HTTP)@en[[[X-]]]] から始まる[[ヘッダー名]]についての規定は [[RFC 723x]]
世代から無くなっています。 ([CODE(HTTP)[[[X-*]]]] を参照。)

[17] [[RFC 2774]] は2桁[[以上]]の [[ASCII数字]]と [CODE(HTTP)[[[-]]]]
から始まる[[ヘッダー名]]を同仕様に基づく拡張で使っています。

;; [[ヘッダー接頭辞]]参照。

[19] [[SSDP]] [SRC[>>18]] および [[UPnP]] における [[HTTP]] [SRC[>>20]]
は [[vendor]] 独自の[[ヘッダー名]]として 
[CODE(HTTP)[[[.]]]] と [[Vendor Domain Name]] で終わる[[ドメイン名]]型の[[字句]]を使うことを認めています。

[FIG(railroad)[
= [[字句]]
= [CODE(HTTP)[[[.]]]]
= [[Vendor Domain Name]]
]FIG]

[16] [[OData]] は、 [[OData]] の実装に対して [CODE(HTTP)@en[[[OData]]]]
から始まる ([[OData]] で規定されていない) [[ヘッダー]]の利用を禁止しています [SRC[>>15]]。

* ヘッダーの一覧

[10] [[HTTPヘッダーの一覧]]を参照。

[11] [[IANA登録簿]]については[[HTTPヘッダー]]を参照。

* 歴史

[26] [CITE@en[Stop lowercasing header names]]
([[annevk]]著, [TIME[2017-02-22 20:01:22 +09:00]])
<https://github.com/whatwg/fetch/commit/5869c43a27fff06c6dfc228fe1288018f7f2168d>

[27] [CITE@en[Adjust CORS wildcard handling slightly]]
([[annevk]]著, [TIME[2017-09-07 17:48:36 +09:00]])
<https://github.com/whatwg/fetch/commit/358dbf5296d91bb791d864b677b367bb11b3bf37>

[28] [CITE@en[Field-name syntax · Issue #30 · httpwg/http11bis]]
([TIME[2017-09-08 14:57:25 +09:00]])
<https://github.com/httpwg/http11bis/issues/30>

[29] [CITE@en[Casing of client headers is maybe not accurate · Issue #475 · whatwg/fetch]]
([TIME[2018-04-18 13:37:56 +09:00]])
<https://github.com/whatwg/fetch/issues/475>

[30] [CITE@en[Editorial: defining header name sorting by annevk · Pull Request #906 · whatwg/fetch]]
([TIME[2020-05-15 17:47:02 +09:00]])
<https://github.com/whatwg/fetch/pull/906>