3. Repr-Digest 字段
Repr-Digest HTTP 字段可用于请求和响应, 用来传达通过把哈希算法应用于整个选定表示数据而计算出的摘要 (see Section 8.1 of [HTTP]).
表示会考虑 HTTP 语义对消息的影响. 例如, 内容可能受范围请求或 HEAD 等方法影响, 而内容 "on the wire" 传输的方式则依赖于其他转换 (例如 HTTP/1.1 的传输编码; see Section 6.1 of [HTTP/1.1]). 为帮助说明 HTTP 表示概念, Appendix A 提供了若干示例.
当消息没有表示数据时, 仍然可以通过对空字符串计算摘要来断言未发送任何表示数据 (see Section 6.3).
Repr-Digest 是一个 Dictionary (see Section 3.2 of [STRUCTURED-FIELDS]), 其中每个:
-
key 传达用于计算摘要的哈希算法 (see Section 5);
-
value 是 Byte Sequence, 传达摘要计算所产生字节输出的编码版本.
例如:
NOTE: '' 按 RFC 8792 进行行包装
Repr-Digest: \
sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
Dictionary 类型可用于附加多个使用不同哈希算法计算出的摘要, 以支持一组能力不同或不断演进的端点. 这种方法可以支持从较弱算法迁移出去 (see Section 6.6).
NOTE: '' 按 RFC 8792 进行行包装
Repr-Digest: \
sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
接收方 MAY 忽略任意一个或全部摘要. 特定于应用的行为或本地策略 MAY 对所传达摘要的处理和验证实践设置附加约束. 安全考虑事项涵盖了与忽略摘要 (see Section 6.6) 和验证多个摘要 (see Section 6.7) 相关的一些问题.
发送方 MAY 在不知道接收方是否支持给定哈希算法的情况下发送摘要. 若发送方知道接收方会忽略摘要, 也 MAY 发送摘要.
Repr-Digest 可以在尾部节中发送. 在这种情况下, Repr-Digest MAY 合并到头部节中; 参见 Section 6.5.1 of [HTTP].
3.1. 在改变状态的请求中使用 Repr-Digest
当改变状态的请求中封装的表示并不描述目标资源时, 表示摘要 MUST 根据表示数据计算. 这是唯一可能的选择, 因为表示摘要需要完整的表示元数据 (see Section 3).
在响应中,
-
如果表示描述的是请求状态, Repr-Digest MUST 根据所封装的表示计算 (see Appendix B.8);
-
如果存在被引用资源, Repr-Digest MUST 根据该被引用资源的选定表示计算, 即使它不同于目标资源. 这样做可能会也可能不会导致根据所封装的表示来计算 Repr-Digest.
后一种情况按照给定方法的 HTTP 语义执行, 例如使用 Content-Location 头部字段 (see Section 8.7 of [HTTP]). 相比之下, Location 头部字段不会影响 Repr-Digest, 因为它不是表示元数据.
例如, 在 PATCH 请求中, 表示摘要会根据补丁文档计算, 因为表示元数据指向补丁文档而非目标资源 (see Section 2 of [PATCH]). 而在响应中, 表示摘要会根据已打补丁资源的选定表示计算.
3.2. 响应中的 Repr-Digest 和 Content-Location
当改变状态的方法返回 Content-Location 头部字段时, 所封装的表示指向由该字段值标识的资源, Repr-Digest 也据此计算. Appendix B.7 给出了一个示例.