7

让我感到困惑的是 HTTP 标头的解码。

示例标题:
Some-Header: "quoted string?"; *utf-8'en'Weirdness

可以引用标题吗?那么 a"本身的编码呢?是'有效的引号字符吗?分号 ( ;) 的含义是什么?HTTP 标头的值解析器是否可以被视为 MIME 解析器?

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

4

1 回答 1

8

可以引用标题值吗?

如果您的意思是 RFC 5987parameter产品是否适用于标头值的主要部分,那么不适用。

Some-Header: "foo"; bar*=utf-8'en'bof

这里标题值的主要部分可能"foo"包括引号,但是......

分号 (;) 的意义是什么?

具体的处理是为每个命名的标头分别定义的。因此,分号对 很重要Content-Disposition,但对 没有Content-Length

显然这不是一个非常令人满意的解决方案,但这就是我们所坚持的。

我正在制作一个透明代理,它需要透明地处理和修改许多野外头字段。

您不能以通用的方式处理这些,您必须知道每个可能的标题的形式。对于您不认识的任何内容,请不要尝试分解标头值;真的,目前支持 RFC 5987 的东西很少,你不太可能对它做很多有用的处理。

今天的现状是,标头值中的非 ASCII 字符不能很好地跨浏览器使用,无论是编码的还是原始的。

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

HTTP 标头的值解析器是否可以被视为 MIME 解析器?

不,HTTP 大量借鉴了 MIME 和 RFC 822 标准系列,但它不属于 822 标准系列。它有自己的低级标题语法,看起来像 822,但不太兼容。任意 MIME 功能不能在 HTTP 中使用,必须有一种标准化机制将它们显式拖入 HTTP ——这就是 RFC 5987 的内容,用于(部分)RFC 2231。

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

理论上,multipart表单提交822 家族的一部分,您应该能够在那里使用 RFC 2231 编码。但现实情况是浏览器也不支持。

于 2011-12-22T23:16:02.910 回答