让我感到困惑的是 HTTP 标头值的解码。
示例标题:
Some-Header: "quoted string?"; *utf-8'en'Weirdness
可以引用标题值吗?那么 a"
本身的编码呢?是'
有效的引号字符吗?分号 ( ;
) 的含义是什么?HTTP 标头的值解析器是否可以被视为 MIME 解析器?
我正在制作一个透明代理,它需要透明地处理和修改许多野外头字段。这就是为什么我需要如此详细的格式。
让我感到困惑的是 HTTP 标头值的解码。
示例标题:
Some-Header: "quoted string?"; *utf-8'en'Weirdness
可以引用标题值吗?那么 a"
本身的编码呢?是'
有效的引号字符吗?分号 ( ;
) 的含义是什么?HTTP 标头的值解析器是否可以被视为 MIME 解析器?
我正在制作一个透明代理,它需要透明地处理和修改许多野外头字段。这就是为什么我需要如此详细的格式。
可以引用标题值吗?
如果您的意思是 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 编码。但现实情况是浏览器也不支持。