协慌网

登录 贡献 社区

HTTP 标头区分大小写吗?

在博客文章中,我使用以下 PHP 设置响应的内容类型:

header('content-type: application/json; charset=utf-8');

我刚刚对该帖子发表了评论,说content-type需要大写, Content-type 。这样对吗?似乎对所有小写字母都适用,并且我假设 HTTP 标头不区分大小写。还是只是因为浏览器不错而起作用?

答案

标头名称不区分大小写。

RFC 2616-“超文本传输协议 - HTTP / 1.1” 的第 4.2 节 “消息头”

每个标题字段均包含一个名称,后跟一个冒号(“:”)和该字段的值。字段名是大小写敏感

更新的 RFC 7230 在此部分未列出对 RFC 2616 的任何更改。

根据 RFC 2616 ,HTTP 标头名称不区分大小写:

4.2:

每个标题字段均包含一个名称,后跟一个冒号(“:”)和该字段的值。字段名称不区分大小写。

(字段可能区分大小写,也可能不区分大小写。)

如果您相信主要的浏览器都遵守这一点,那么一切就绪。


顺便说一句,不像大多数 HTTP 的,方法(动词)区分大小写:

5.1.1 方法

方法令牌指示要在
由 Request-URI 标识的资源。该方法区分大小写。

Method         = "OPTIONS"                ; Section 9.2
                  | "GET"                    ; Section 9.3
                  | "HEAD"                   ; Section 9.4
                  | "POST"                   ; Section 9.5
                  | "PUT"                    ; Section 9.6
                  | "DELETE"                 ; Section 9.7
                  | "TRACE"                  ; Section 9.8
                  | "CONNECT"                ; Section 9.9
                  | extension-method
   extension-method = token

tldr; HTTP / 1.1 和 HTTP / 2 标头都不区分大小写。

根据RFC 7230 (HTTP / 1.1):

每个标题字段均由不区分大小写的字段名,后跟冒号(“:”),可选的前导空格,字段值和可选的尾随空格组成。

https://tools.ietf.org/html/rfc7230#section-3.2

另外, RFC 7540 (HTTP / 2):

就像在 HTTP / 1.x 中一样,标头字段名称是 ASCII 字符串
以不区分大小写的方式比较的字符。

https://tools.ietf.org/html/rfc7540#section-8.1.2