跳到主要内容

6. 历史列表 (History Lists)

用户代理通常具有历史机制,例如"后退"按钮和历史列表,可用于重新显示会话中较早获取的表示。

新鲜度模型(第 4.2 节)不一定适用于历史机制。也就是说,即使先前的表示已经过期,历史机制仍然可以显示它。

这并不禁止历史机制告知用户某个视图可能已过期,也不禁止它遵守缓存指令,例如 Cache-Control: no-store。


7. IANA 考虑事项 (IANA Considerations)

本规范为 IANA 的使用定义了两个新注册表,如下节所述。此外,它还注册了之前定义的头字段,升级其状态,并注册了之前未注册的 MIME 类型。

7.1. 缓存指令注册表 (Cache Directive Registry)​

"超文本传输协议(HTTP)缓存指令注册表"定义了缓存指令的命名空间。该注册表已创建,现在维护于 http://www.iana.org/assignments/http-cache-directives。

7.1.1. 流程​

注册必须(MUST)包含以下字段:

  • 缓存指令名称
  • 指向规范文本的指针

要添加到此命名空间的值需要 IETF 审查(见 [RFC5226] 第 4.1 节)。

7.1.2. 新 Cache-Control 指令的考虑事项​

新的扩展指令应当(ought to)考虑定义:

  • 多次指定指令意味着什么,
  • 当指令不接受参数时,出现参数意味着什么,
  • 当指令接受参数时,缺少参数意味着什么。

另见第 5.2.3 节。

注意:有关 7.1.3(注册)、7.2(警告码注册表)和 7.3(头字段注册)的详细信息,请参阅相应的子节文件。


8. 安全考虑事项 (Security Considerations)

本节旨在告知开发者、信息提供者和用户与 HTTP 缓存相关的已知安全问题。

缓存会暴露额外的潜在漏洞,因为缓存内容是恶意利用的有吸引力的目标。由于缓存内容在 HTTP 请求完成后仍然存在,对缓存的攻击可能在用户认为信息已从网络移除很久之后仍泄露这些信息。因此,缓存内容必须作为敏感信息加以保护。

此外,缓存的以下方面可能导致问题:

8.1. 时序攻击​

缓存的主要用途之一是通过避免传输缓存中已保存的信息来优化性能,但不幸的是,这种优化也可能被用于执行时序攻击。具体而言,能够检测缓存最近是否被用于访问某些资源,可能会泄露用户浏览历史中的模式。

缓解措施包括使用加密连接来防止第三方观察,以及通过谨慎设计来限制攻击者探测缓存状态的能力。

8.2. 敏感信息的暴露​

共享缓存按定义可由多个用户访问,并可能跨多个组织访问。此类缓存需要仔细区分已授权内容和未授权内容,以避免返回不适当的响应。缓存实现需要谨慎并严格遵守可能表示敏感信息的指令,如 private、no-cache 和 no-store。

8.3. 缓存投毒​

对缓存的主要攻击之一是通过引入伪造的响应来"投毒"。缓存投毒的影响取决于缓存如何处理伪造的响应。如果缓存将伪造的响应视为权威响应,则缓存可能在较长时间内被用于提供不正确的信息。

缓解措施:可以通过在缓存之前正确验证响应,以及使用安全连接来防止中间人攻击,从而缓解缓存投毒。