在博文中,我使用以下PHP来设置响应的内容类型:
header('content-type: application/json; charset=utf-8');
我刚收到该帖子的评论,说content-type
需要大写,Content-type
。它是否正确?它似乎适用于所有小写的我,我假设HTTP标题不区分大小写。或者它是否正常工作,因为浏览器很好?
答案 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:
每个标题字段由名称后跟冒号(“:”)和字段值组成。字段名称不区分大小写。
(字段值可能区分大小写,也可能不区分大小写。)
如果您信任主流浏览器遵守此规则,那么您已经完成了设置。
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):
每个标头字段由不区分大小写的字段名称组成 然后是冒号(":"),可选的前导空格,即字段 值和可选的尾随空格。
https://tools.ietf.org/html/rfc7230#section-3.2
此外, RFC 7540 (HTTP / 2):
就像在HTTP / 1.x中一样,标题字段名称是ASCII的字符串 以不区分大小写的方式比较的字符。
答案 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
这不是" HTTP"标准,但只是另一个浏览器怪癖,我们作为开发人员,必须考虑。
答案 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'