1.3. HTTP Message Transformations (HTTP 消息转换)
1.3. HTTP Message Transformations (HTTP 消息转换)
如前所述, HTTP 明确允许并在某些情况下要求实现以多种方式转换消息. 实现必须容忍其中许多转换. 以下是可能在 HTTP 下发生的转换的非规范性且非穷举列表, 仅作背景:
-
对不同字段名的字段重新排序 ([HTTP] 第 5.3 节).
-
合并同名字段 ([HTTP] 第 5.2 节).
-
移除
Connection头字段中列出的字段 ([HTTP] 第 7.6.1 节). -
添加指示控制选项的字段 ([HTTP] 第 7.6.1 节).
-
添加或移除传输编码 (transfer coding) ([HTTP] 第 7.7 节).
-
添加诸如
Via([HTTP] 第 7.6.3 节) 与Forwarded([RFC7239] 第 4 节) 等字段. -
在不同 HTTP 版本之间转换 (例如 HTTP/1.x 与 HTTP/2 互转).
-
大小写变更 (例如
Origin变为origin), 针对任何不区分大小写的组成部分, 如字段名, 请求 URI 方案或主机. -
对请求目标与 authority 的变更, 若一起应用后不改变消息的 target URI ([HTTP] 第 7.1 节所定义).
此外, 有些转换已弃用或以其他方式不允许, 但仍可能在现实中出现. 这些转换仍可处理而不破坏签名, 包括诸如:
-
在字段值中使用, 添加或删除前导或尾随空白.
-
在字段值中使用, 添加或删除 obs-fold ([HTTP/1.1] 第 5.2 节).
可将这些类型的转换识别为即使对签名所覆盖的消息组成部分执行也不应阻止签名验证的转换. 此外, 对未被签名覆盖的组成部分的所有变更都不应阻止签名验证.
这些转换的若干示例及其对消息签名的影响见附录 B.4.
其他转换, 例如解析并重新序列化被覆盖组成部分的字段值或变更派生组成部分的值, 可能导致签名不再相对目标消息有效. 本规范的应用需要谨慎确保应用预期的转换能够通过被覆盖组成部分的选择得到充分处理.