1.2. Requirements (需求背景)
1.2. Requirements (需求背景)
HTTP 允许且有时要求中间人以多种方式转换消息. 这可能导致接收者收到的消息与最初发送的消息在位级上不等价. 在此情况下, 接收者无法验证发送者 HTTP 消息原始字节的完整性保护, 因为验证数字签名或 MAC 要求签名者与验证者拥有完全相同的签名基. 由于无法依赖消息的确切原始字节作为签名基的可靠来源, 签名者与验证者必须通过一种对不改变消息含义的安全变更具有弹性的机制, 各自从其各自版本的消息独立创建签名基.
由于多种原因, 严格定义何谓安全变更与何谓不安全变更是不切实际的. 应用以多种方式使用 HTTP, 可能对消息中某条信息 (例如消息内容, 方法或特定头字段) 是否相关存在分歧. 因此, 通用解决方案需要为签名者提供对哪些消息组成部分进行签名的一定程度的控制.
HTTP 应用可能运行在无法完整访问或控制 HTTP 消息的环境 (例如 Web 浏览器的 JavaScript 环境) 中, 或使用抽象协议细节的库 (例如 Java HTTP Client (HttpClient) 库 (https://openjdk.java.net/groups/net/httpclient/intro.html)). 这些应用需要在对 HTTP 消息了解不完整的情况下仍能生成并验证签名.