跳到主要内容

2. HTTP Message Components (HTTP 消息组成部分)

2. HTTP Message Components (HTTP 消息组成部分)

为使签名者与验证者能够确定哪些组成部分被签名覆盖, 本文档定义了被 HTTP 消息签名覆盖的组成部分的组成部分标识符, 一套从 HTTP 消息推导这些标识符关联值并对其进行规范化的规则, 以及将这些规范化值组合为签名基的手段.

用于推导这些值的签名上下文 (signature context) 对消息的签名者与验证者必须可访问. 上下文对给定签名中的所有组成部分必须相同. 例如, 对 @query 派生组成部分使用原始查询字符串, 但对 @query-param 派生组成部分使用合并的查询与表单参数, 将是错误. 关于消息组成部分上下文的更多注意事项见第 7.4.3 节.

组成部分标识符由组成部分名称与该名称关联的任意参数构成. 每个名称要么是 HTTP 字段名 (第 2.1 节), 要么是已注册的派生组成部分名称 (第 2.2 节). 标识符的可能参数取决于该标识符. 列出所有可能参数的 "HTTP Signature Component Parameters" 注册表定义于第 6.5 节.

在单个被覆盖组成部分列表内, 每个组成部分标识符必须仅出现一次. 若组成部分名称不同, 或同一组成部分名称下任意参数不同, 则两标识符不同. 若参数使其相区分, 可以包含多个具有相同组成部分名称的标识符, 例如 "foo";bar"foo";baz. 处理组成部分标识符时 (例如在验证解析期间) 必须保留参数顺序, 但在比较两标识符是否相等时参数顺序无意义. 即 "foo";bar;baz 不能与 "foo";baz;bar 同处一消息, 因为这两个标识符等价, 但处理一种形式的系统不允许将其变换为另一种形式.

与组成部分标识符关联的组成部分值由该标识符自身定义. 组成部分值不得包含换行 (\n) 字符. 某些 HTTP 消息组成部分可能经历在位级上改变值但不改变含义的转换 (例如合并字段值时). 因此消息组成部分值在签名前需要规范化, 以确保尽管存在此类中间转换仍能验证签名. 本文档为每个组成部分标识符定义规则, 将其关联组成部分值变换为这种规范形式.

下列各节定义组成部分标识符名称, 参数, 关联值及其值的规范化规则. 将消息组成部分组合为签名基的方法定义于第 2.5 节.