在博客文章中,我使用以下PHP设置响应的内容类型:
header('content-type: application/json; charset=utf-8');
我刚刚对该帖子发表了评论,说content-type
需要大写Content-type
。它是否正确?似乎对所有小写字母都有效,并且我假设HTTP标头不区分大小写。还是只是因为浏览器不错而起作用?
在博客文章中,我使用以下PHP设置响应的内容类型:
header('content-type: application/json; charset=utf-8');
我刚刚对该帖子发表了评论,说content-type
需要大写Content-type
。它是否正确?似乎对所有小写字母都有效,并且我假设HTTP标头不区分大小写。还是只是因为浏览器不错而起作用?
Answers:
根据RFC 2616,HTTP标头名称不区分大小写:
4.2:
每个标题字段均由名称,后跟冒号(“:”)和字段值组成。字段名称不区分大小写。
(字段值可能区分大小写,也可能不区分大小写。)
如果您相信主要的浏览器都遵守这一点,那么一切都准备就绪。
顺便说一句,不像大多数HTTP的,方法(动词)是区分大小写:
5.1.1方法
方法令牌指示要在
由请求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
字符的字符串,以不区分大小写的方式进行比较。
HTTP的RFC(如上所述)指示标头不区分大小写,但是您会发现,对于某些浏览器(我正在浏览IE),大写每个单词往往是最好的:
Location: http://stackoverflow.com
Content-Type: text/plain
与
location: http://stackoverflow.com
content-type: text/plain
这不是“ HTTP”标准,但作为开发人员,我们必须考虑的另一个浏览器怪癖。