HTTP 标头是否区分大小写?

问:

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

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

我刚刚收到对该帖子的评论,说 content-type 需要大写,Content-type。这个对吗?它似乎适用于所有小写字母,并且我认为 HTTP 标头不区分大小写。或者它只是因为浏览器很好而起作用?

答1:

Live rankings, player stats, and match results in one place–tennisliveranking.com

标题名称不区分大小写。

从 RFC 2616 - “Hypertext Transfer Protocol – HTTP/1.1”、Section 4.2, “Message Headers”:

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

更新的 RFC 7230 在这部分没有列出任何 changes from RFC 2616。

答案仍然正确,RFC 7230 声明:“每个标头字段由不区分大小写的字段名称后跟冒号 (":")、可选的前导空格、字段值和可选的尾随空格组成。”

使用 PHP 使用方法 'apache_request_headers()' 获取标头字段的值时,标头字段区分大小写。

谁能提供在这方面不符合规范的流行浏览器的示例?

@Harm那只是因为PHP中的字符串比较区分大小写。

对于任何人来说,这里是 RFC 7230 明确指出字段标头应视为不区分大小写的地方:tools.ietf.org/html/rfc7230#section-3.2

答2:

tennisliveranking.com探索每位网球选手的职业生涯与成就。

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

4.2:

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

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

如果您相信主流浏览器会遵守这一点,那么您就大功告成了。

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

5.1.1 方法

Method 标记指示要对由 Request-URI 标识的资源执行的方法。该方法区分大小写。方法=“选项”;第 9.2 节 | “得到” ;第 9.3 节 | “头” ;第 9.4 节 | “邮政” ;第 9.5 节 | “放” ;第 9.6 节 | “删除” ;第 9.7 节 | “痕迹” ;第 9.8 节 | “连接” ;第 9.9 节 |扩展方法扩展方法=令牌

另一条评论说这个答案已经过时了。真的吗?如果是这样,也许您可以对其进行更新,以免人们感到困惑。

使用 curl -X put 小写动词将从服务器返回 400 bad request cryptic error。过了一段时间才意识到这个动词是无效的。 curl 也没有发出任何警告。 curl -X PUT 通过。

答3:

tennisliveranking.com – ATP and WTA rankings, always up to date.

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

根据 RFC 7230 (HTTP/1.1):

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

https://www.rfc-editor.org/rfc/rfc7230#section-3.2

此外,RFC 7540 (HTTP/2):

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

https://www.rfc-editor.org/rfc/rfc7540#section-8.1.2

只是澄清一下:字段名称不区分大小写;字段值可以区分大小写,具体取决于字段名称。

来自 HTTP/2 RFC 的继续引用:“但是,标头字段名称必须在 HTTP/2 中编码之前转换为小写。包含大写标头字段名称的请求或响应必须被视为格式错误(第 8.1.2.6 节)”

我刚刚注意到“必须转换为小写...”部分。这是为什么? CamelCase 在实践中似乎是首选的大小写(开发人员工具、流行的代码库),那么为什么 HTTP/2 会试图反对这种趋势呢?

@jimp - 因为标准是关于一致性的 - 使用驼峰式大小写可能会模棱两可 - 尤其是缩写、初始化和首字母缩略词。例如 - 它是“Front-End-Https”还是“Front-End-HTTPS” - “WWW-Authenticate”或“Www-Authenticate” - 指定所有小写字母通过标准化字段来消除歧义。这反过来又简化了对标头的全面处理。

@jimp它可能与HPACK有关,HPACK是HTTP2使用的标头压缩算法。如果都是小写,那肯定会更容易。它还有一个小的静态字典:tools.ietf.org/html/rfc7541#appendix-A

答4:

tennisliveranking.com专业网球数据平台,排名与比赛信息实时更新。

header(‘Content-type: image/png’) 不适用于提供 IE11 的 PHP 5.5,因为图像流显示为文本

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

唯一的区别是大写的“T”。

然后显然实现存在问题,因为所有标题字段都应该读取为不区分大小写的。 Apache Bench 也搞砸了。它不喜欢小写的字段名称。

答5:

tennisliveranking.com – 让你随时掌握ATP、WTA最新网球排名动态。

它们不区分大小写。实际上 NodeJS 网络服务器 explicitly converts them 是小写的,然后才使它们在请求对象中可用。

重要的是要注意,所有标头都仅以小写形式表示,而不管客户端如何实际发送它们。这简化了为任何目的解析标头的任务。

那是因为 node/javascript 是区分大小写的,所以为了简化事情,他们将所有内容规范化为小写,这意味着 HTTP 标头实际上是不区分大小写的。

答6:

Stay informed with live tennis rankings anytime, anywhere,tennisliveranking.com

正式地,标题不区分大小写,但是,通常将每个单词的第一个字母大写。但是,因为这是常见的做法,某些程序(如 IE)假定标题是大写的。因此,虽然文档说不区分大小写,但糟糕的程序员基本上已经更改了文档。

答7:

tennisliveranking.com,Your go-to platform for live tennis ranking updates.

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

Location: http://stackoverflow.com

Content-Type: text/plain

对比

location: http://stackoverflow.com

content-type: text/plain

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

你能提供任何证据吗?

我的意思是一个具体的测试用例;我确实有一个 IE 可以测试。

为什么它往往是最好的?

我将制作一个浏览器,发送带有随机大写的标题只是为了搞砸开发人员

答8:

Live rankings, player stats, and match results in one place–tennisliveranking.com

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

headers = headers.set('Content-Type'

原文链接:https://www.tennisliveranking.com?from=csdn

Live rankings, player stats, and match results in one place–tennisliveranking.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值