HTTP标头区分大小写吗?

时间:2011-03-10 11:22:17

标签: http http-headers

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

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

我刚收到该帖子的评论,说content-type需要大写,Content-type。它是否正确?它似乎适用于所有小写的我,我假设HTTP标题不区分大小写。或者它是否正常工作,因为浏览器很好?

9 个答案:

答案 0 :(得分:786)

标题名称不区分大小写。

来自RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1"Section 4.2, "Message Headers"

  

每个标题字段由名称后跟冒号(“:”)和字段值组成。字段名称为 敏感。

更新RFC 7230未在此部分列出任何changes from RFC 2616

答案 1 :(得分:212)

根据RFC 2616

,HTTP标头名称不区分大小写

4.2:

  

每个标题字段由名称后跟冒号(“:”)和字段值组成。字段名称不区分大小写。

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

如果您信任主流浏览器遵守此规则,那么您已经完成了设置。


<> BTW,与大多数HTTP不同,方法(动词) 区分大小写:

5.1.1方法

  

Method标记表示   要执行的方法   由...确定的资源   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

答案 2 :(得分:28)

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

根据 RFC 7230 (HTTP / 1.1):

  

每个标头字段由不区分大小写的字段名称组成   然后是冒号(&#34;:&#34;),可选的前导空格,即字段   值和可选的尾随空格。

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

答案 3 :(得分:14)

header('Content-type: image/png') 没有使用PHP 5.5服务IE11,因为图像流显示为文本

header('Content-Type: image/png') 工作,如在图像中显示为图像

唯一的区别是资本'T'。

答案 4 :(得分:3)

HTTP的RFC(如上所述)规定标题不区分大小写,但是你会发现,对于某些浏览器(我看着你,IE),每个词的大写都倾向于最好:

Location: http://stackoverflow.com

Content-Type: text/plain

VS

location: http://stackoverflow.com

content-type: text/plain

这不是&#34; HTTP&#34;标准,但只是另一个浏览器怪癖,我们作为开发人员,必须考虑。

答案 5 :(得分:2)

它们不区分大小写。实际上,在使NodeJS Web服务器explicitly converts them在请求对象中可用之前,它们已转换为小写字母。

  

请务必注意,所有标头均以   仅小写字母,无论客户端实际如何发送它们。这个   简化了出于任何目的解析标头的任务。

答案 6 :(得分:0)

正式地,标头不区分大小写,但是,通常的做法是将每个单词的首字母大写。
但是,由于是通常的做法,因此某些程序(例如IE)会假定标头使用大写字母。
因此,尽管文档说区分大小写,但是糟糕的程序员基本上已经更改了文档。

答案 7 :(得分:0)

我使用的代码如下:

reqObj['headers'] = new Headers({
    CSRF: ABCD-DEFG..,
});

我可以看到它被转换为小写字母 ('csrf')。将重新审视,并更新进一步的发现。但是,由于它是由构造函数完成的,我认为它应该可以工作。因此,标题似乎也不区分大小写。

答案 8 :(得分:-9)

Headers单词不区分大小写,但是像Content-Type一样,在右侧是这样写的好习惯,因为它区分大小写。就像我下面的例子

headers = headers.set('Content-Type'