unicode – 解析HTTP标头值:引用,RFC 5987,MIME等

令我困惑的是解码HTTP标头值.

示例标题:
Some-Header:“引用字符串?”; * UTF-8’en’Weirdness

可以引用标题值吗?那个“本身”的编码怎么样?是一个有效的引号字符?分号(;)的意义是什么?HTTP头的值解析器可以被认为是一个MIME解析器吗?

我正在制作一个透明的代理,需要透明地处理和修改许多野外的头字段.这就是为什么我需要这么多关于格式的细节.

Can header values be quoted?

如果您的意思是RFC 5987参数生成适用于标头值的主要部分,那么没有.

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.

您无法以通用方式处理这些问题,您必须知道每个可能标头的形式.对于您无法识别的任何内容,请勿尝试分解标头值;实际上,目前很少支持RFC 5987,你不太可能对它进行很多有用的处理.

今天的现状是标题值中的非ASCII字符无法正常使用跨浏览器,无论是编码还是原始.

幸运的是,他们很少需要.唯一真正常见的用例是Content-Disposition的非ASCII文件名,但通过将文件名放在尾随URL路径部分中更容易解决.

Could the value parser for a HTTP header be considered a MIME parser?

没有.一般来说,HTTP大量借用MIME和RFC 822系列标准,但它不属于822系列.它有自己的标题低级语法,看起来像822,但不太兼容.任意MIME功能都不能在HTTP中使用,必须有一个标准化机制将它们明确地拖到HTTP中 – 这就是RFC 5987对于(部分)RFC 2231的作用.

(有关其他一些差异的讨论,请参见RFC 2616第19.4节.)

理论上,多部分表单提交是822系列的一部分,您应该能够在那里使用RFC 2231编码.但实际情况是浏览器也不支持.

相关文章
相关标签/搜索