当我构建 RESTful 客户端和服务器时,使用 percent-encoding 是否合适或有必要?使用 HTTP header (请求或响应),还是这种类型的编码仅适用于 URI?
最佳答案
基本上没有,但见下文。
RFC2616仅针对 URI 描述百分比编码(搜索 %
或 HEX HEX
或 percent
),它定义了 field-value
没有提到百分比编码。
但是,RFC2616 允许 header 字段值中的任意八位字节(CTL
除外),并且有一个半生不熟的声明提到 MIME 编码 (RFC2047) 用于不在 ISO-8859-1 中的字符(请参阅其 Section 2.2 中 TEXT
的定义)。我称该声明为“半生不熟”,因为它没有明确说明 ISO-8859-1 是用于解释八位字节的强制字符集,但尽管如此,它规范地要求对外部字符使用 MIME 编码该字符集。似乎 ISO-8859-1 的使用和 header 字段值的 MIME 编码都没有得到广泛支持。
HTTPbis 似乎已经放弃了这一点,并返回到 US-ASCII 以获取 header 字段值。参见 this answer了解详情。
我的解读是:
对于标准 header 字段(在 RFC2616 中定义的字段),不允许使用百分比编码。
对于扩展头字段,百分比编码在 RFC2616 中没有描述,但是有应用各种编码的空间,包括百分比编码,只要结果字符是 US-ASCII(如果你想面向 future )。只是不要认为您必须使用百分比编码。
我找到的更多资源:
- https://www.quora.com/Do-HTTP-headers-need-to-be-encoded证实了我的理解,尽管它没有具体说明标准 header 与扩展 header ,也没有引用来源。
- https://support.ca.com/us/knowledge-base-articles.TEC1904612.html认为他们产品中扩展 header 的百分比编码是一种针对 CSS 攻击的保护措施。
关于rest - 对 HTTP header 使用百分比编码是否合适或有必要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215227/