7.5.2. Semantically Equivalent Field Values (语义等价的字段值)
7.5.2. Semantically Equivalent Field Values (语义等价的字段值)
签名基生成算法 (第 2.5 节) 使用 HTTP 字段的值作为其组成部分值. 常见情况下, 这对签名者与验证者意味着将字段值的实际字节作为组成部分值. 然而, 某些字段值允许以语义等价方式变换值而改变值本身使用的字节. 例如, 字段定义可声明其部分或全部值不区分大小写或对内部空白字符有特殊处理. 其他字段有来自中间人的预期变换, 如 Via 头字段中注释的移除. 此类情况下, 验证者若使用等价变换后的字段值可能陷入困境, 该值与签名者使用的字节值不同. 验证者难以发现此类错误, 因为字段值对应用仍可接受但签名基所需的实际字节不匹配.
处理此类字段时, 签名者与验证者必须就如何处理此类变换 (若有) 达成一致. 一种选项是不签名有问题的字段, 但必须谨慎确保应用仍有充分签名覆盖 (第 7.2.1 节). 另一种选项是在加入 HTTP 消息之前为字段定义应用专用规范化值, 如签名前始终删除内部注释或始终将值转为小写. 由于这些变换在用作签名基生成算法输入之前应用于字段, 签名基仍将仅包含消息中出现的字段的字节值. 若变换在从消息提取值之后, 加入签名基之前应用, 可能对应用发起值替换攻击等不同攻击面. 所有应用专用附加规则在本规范范围之外, 且这些变换本质上会损害本应用外实现的互操作性. 建议应用尽可能避免使用此类附加规则.