![]() |
1
1281
:2011年6月1日
IETF draft
已发布到
贬损
建议对非标准头使用“X-”前缀。原因是,当前缀为“X-”的非标准头成为标准头时,删除“X-”前缀会破坏向后兼容性,迫使应用程序协议同时支持这两个名称(例如,
:2012年6月,反对使用“X-”前缀的建议正式成为 RFC 6648 . 以下是相关引用:
请注意,“不应”(“劝阻”)与“不得”(“禁止”)不同,另请参见 RFC 2119 关于这些关键字的另一个规范。换句话说,您可以继续使用前缀为“X-”的标题,但它不再是官方推荐的,而且您可能肯定不会将它们作为公共标准来记录。 :
|
![]() |
2
577
这个问题值得重读。提出的实际问题与CSS属性中的供应商前缀不同,在CSS属性中,对供应商支持和官方标准的未来验证和思考是合适的。实际问题更类似于选择URL查询参数名。没有人应该关心他们是什么。但是,将自定义的名称分隔开来是一种完全有效的、常见的、正确的做法。
理论基础:
“X-”前缀没有什么特别或神奇的地方,但它有助于明确它是一个自定义头。事实上,RFC-6648等有助于支持使用“X-”前缀的理由,因为——随着HTTP客户端和服务器的供应商放弃前缀——你的应用程序特定的私有API,个人数据传递机制正在变得更加不受名称空间与少量官方保留头名称的冲突的影响。也就是说,我个人的偏好和建议是更进一步,比如“X-ACME-ClientDataFoo”(如果你的widget公司是“ACME”)。
|
![]() |
3
67
HTTP头的格式在HTTP规范中定义。我将讨论HTTP1.1,其规范是 RFC 2616 . 在第4.2节“消息头”中,定义了消息头的一般结构:
依次基于CHAR、CTL和分隔符:
定义后有一个注释:
所以,有两个结论。首先,很明显 名称 必须由ASCII字符的子集组成-字母数字,一些标点符号,而不是很多其他字符。其次,标题的定义中没有任何内容 价值 这将它限制为ASCII或排除8位字符:它显式地由八位字节组成,只有控制字符被禁止(注意,CR和LF被认为是控制字符)。此外,对文本生成的评论意味着八位字节将被解释为在ISO-8859-1中,并且存在一种编码机制(顺便说一句,这是可怕的)来表示编码之外的字符。 因此,特别是对@BalusC的响应,很明显,根据规范,标题值在ISO-8859-1中。我在Tomcat的头中发送了高8859-1字符(特别是法语中使用的一些重音元音),Firefox对它们进行了正确的解释,因此在某种程度上,这在实践中和理论上都是有效的(虽然这是一个位置头,其中包含一个URL,而且这些字符在URL中是不合法的,所以这实际上是错误的不合法,但根据不同的规则!)。 也就是说,我不会依赖ISO-8859-1在所有服务器、代理和客户机上工作,所以我会坚持使用ASCII作为防御编程。 |
![]() |
4
29
RFC6648 建议您假设您的自定义头“可能成为标准化的、公共的、通常部署的或跨多个实现可用的”。因此,建议不要使用“X-”或类似的构造作为前缀。 然而,有一个例外是“当[你的头]极不可能被标准化的时候。”对于这种“特定于实现和私有使用”的头,RFC说像供应商前缀这样的名称空间是合理的。 |
![]() |
5
19
或者更准确地说, 额外的HTTP头是一个伟大的代码调试工具,如果没有别的。 当URL请求返回重定向或图像时,没有html“页面”可以临时将调试代码的结果写入其中-至少在浏览器中不可见。
我经常添加额外的HTTP头文件,比如X-fubar-somevar:或X-testing-someresult:来进行测试,并且发现了很多本来很难追踪的bug。 |
![]() |
6
16
|
![]() |
Community wiki · REST应用程序中的基本身份验证 1 年前 |
![]() |
Heathcliff · 访问NGRX中的HTTP头响应 2 年前 |
![]() |
Adeel Miraj · 阿拉莫菲尔-授权持有人和授权海关 6 年前 |
![]() |
Hiren Gohel PRASANNA KUMAR K G · 使用api调用时,Laravel如何解码HTTP请求正文内容类型:application/x-www-form-urlencoded 6 年前 |
![]() |
Talkerbox · 如何在uwsgi日志中添加HTTP头 6 年前 |