unicode - 解析 HTTP header 值 : Quoting, RFC 5987、MIME 等

标签 unicode http-headers mime quoting

令我困惑的是 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/

相关文章:

ios - 如何在 iphone 中显示五位 unicode

delphi - 口音编码

javascript - Uncaught SyntaxError : Unexpected token::

ruby-on-rails - Ruby,如何使用 MIME 多部分正确解码邮件?

java - 验证以检查其是否为 ".txt"文件

Python嵌套列表替换字符串中的unicode字符

mysql - MySQL UTF8 排序规则是否适合日文和韩文字符?

go - Gzip 头强制文件下载

php - NGINX 允许带有下划线的 header

c# - 在 ASP.NET MVC 中返回文件以查看/下载