令我困惑的是 HTTP header 值的解码。
示例标题:Some-Header: "quoted string?"; *utf-8'en'Weirdness
jar 头值(value)的被引用? "
的编码怎么样?本身?是 '
一个有效的引号字符?分号 ( ;
) 的意义是什么? HTTP header 的值解析器能否被视为 MIME 解析器?
我正在制作一个透明代理,它需要透明地处理和修改许多 in-the-wild header 字段。这就是为什么我需要关于格式的如此多的细节。
最佳答案
Can header values be quoted?
如果您的意思是 RFC 5987
parameter
生产适用于标题值的主要部分,然后没有。Some-Header: "foo"; bar*=utf-8'en'bof
这里头值的主要部分可能是
"foo"
包括引号,但是...What's the significance of a semi-colon (;)?
具体的处理是为每个命名的头单独定义的。所以分号对于
Content-Disposition
来说很重要,但不适用于 Content-Length
.显然,这不是一个非常令人满意的解决方案,但这就是我们所坚持的。
I am making a transparent proxy that needs to transparently handle and modify many in-the-wild header fields.
你不能以通用的方式处理这些,你必须知道每个可能的标题的形式。对于任何你不认识的东西,不要试图分解 header 值;实际上,目前很少有人支持 RFC 5987,您不太可能对它进行很多有用的处理。
今天的现状是, header 值中的非 ASCII 字符根本无法在跨浏览器中使用,无论是编码的还是原始的。
幸运的是,它们很少被需要。唯一真正常见的用例是
Content-Disposition
的非 ASCII 文件名但是通过将文件名放在尾随 URL 路径部分中更容易解决。Could the value parser for a HTTP header be considered a MIME parser?
不可以。HTTP 大量借鉴了 MIME 和 RFC 822 系列标准,但它不是 822 系列的一部分。它有自己的低级头语法,看起来像 822,但不太兼容。不能在 HTTP 中使用任意 MIME 功能,必须有一个标准化机制将它们明确地拖入 HTTP——这就是 RFC 5987,对于(部分)RFC 2231。
(有关其他一些差异的讨论,请参阅 RFC 2616 的第 19.4 节。)
理论上,
multipart
表单提交是 822 系列的一部分,您应该能够在那里使用 RFC 2231 编码。但现实是浏览器也不支持。
关于unicode - 解析 HTTP header 值 : Quoting, RFC 5987、MIME 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609389/