问:
在一篇博文中,我使用以下 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