【发布时间】:2014-06-06 13:41:06
【问题描述】:
当我构建 RESTful 客户端和服务器时,将percent-encoding 与 HTTP 标头(请求或响应)一起使用是否合适或有必要,还是这种类型的编码仅适用于 URI?
【问题讨论】:
-
你自己看吧,RFC 2616是http协议最重要的定义:tools.ietf.org/html/rfc2616
当我构建 RESTful 客户端和服务器时,将percent-encoding 与 HTTP 标头(请求或响应)一起使用是否合适或有必要,还是这种类型的编码仅适用于 URI?
【问题讨论】:
基本上没有,但见下文。
RFC2616 仅描述 URI 的百分比编码(搜索 % 或 HEX HEX 或 percent),它定义了 field-value 而没有提及百分比编码。
但是,RFC2616 允许在标头字段值中使用任意八位字节(CTLs 除外),并且有一个半生不熟的声明提到了 ISO-8859-1 中以外的字符的 MIME 编码 (RFC2047)(请参阅@987654331 的定义@ 在其Section 2.2)。我称该声明为“半生不熟”,因为它没有明确说明 ISO-8859-1 是用于解释八位字节的强制性字符集,但尽管如此,它通常要求对外部字符使用 MIME 编码那个字符集。似乎 ISO-8859-1 的使用和标头字段值的 MIME 编码都没有得到广泛支持。
HTTPbis 似乎已经放弃了这一点,并返回到 US-ASCII 来获取标头字段值。详情请见this answer。
我的阅读是:
对于标准标头字段(在 RFC2616 中定义),不允许使用百分比编码。
对于扩展头字段,百分比编码在RFC2616中没有描述,但是有应用各种编码的空间,包括百分比编码,只要结果字符是US-ASCII(如果你想成为未来-证明)。只是不要认为你有使用百分比编码。
我找到的更多来源:
【讨论】:
TL;DR: 八位字节编码和 base64 编码都可以。
指示 HTTP 标头字段参数的字符编码和语言 https://www.rfc-editor.org/rfc/rfc8187
本文档指定了适合在 HTTP 标头中使用的编码 字段...
阅读“3.2.3. 示例”
base64 编码也很好,请阅读 HTTP 基本授权规范:https://www.rfc-editor.org/rfc/rfc7617
【讨论】: