在一篇博客文章中,我使用下面的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在此部分的任何更改。

其他回答

HTTP的RFC(如上所述)规定header是不区分大小写的,但是你会发现在某些浏览器中(我在看你,IE),每个单词的大写往往是最好的:

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

这不是“HTTP”标准,只是浏览器的另一个怪癖,我们作为开发人员必须考虑。

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

4.2:

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

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

如果您相信主流浏览器会遵守这一点,那么您就万事俱备了。


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

5.1.1方法

The Method token indicates the method to be performed on the resource identified by the Request-URI. The method is case-sensitive. 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

正式来说,头是不区分大小写的,但是,通常的做法是将每个单词的第一个字母大写。 但是,因为这是常见的做法,某些程序,如IE,假设头文件是大写的。 所以当文档说它们不区分大小写时,糟糕的程序员基本上已经改变了文档。

头(“内容类型:图像/ png”) 不工作与PHP 5.5服务的IE11,因为在图像流显示为文本

头(“内容类型:图像/ png”) 工作,就像在图像中出现的图像一样

唯一不同的是大写的“T”。

标头名称不区分大小写。

来自RFC 2616 -“超文本传输协议—HTTP/1.1”,章节4.2,“消息头”:

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

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