跳到主要内容

2. 缓存操作概述 (Overview of Cache Operation)

适当的缓存操作会保留 HTTP 传输语义, 同时减少对缓存中已有信息的传输. 关于 HTTP 的一般术语和核心概念, 见 [HTTP] 第 3 节.

虽然缓存是 HTTP 的完全 OPTIONAL 功能, 但可以假定重用缓存响应是可取的, 并且在没有要求或本地配置阻止的情况下, 这是默认行为. 因此, HTTP 缓存要求的重点是防止缓存存储不可重用的响应, 或不恰当地重用已存储响应, 而不是强制缓存始终存储和重用特定响应.

"缓存键 (cache key)" 是缓存用于选择响应的信息, 至少由取得已存储响应时使用的请求方法 (request method) 和目标 URI (target URI) 组成; 该方法决定在什么情况下可以使用该响应来满足后续请求. 然而, 当前常用的许多 HTTP 缓存只缓存 GET 响应, 因而只使用 URI 作为缓存键.

对于受内容协商 (content negotiation) 影响的请求目标, 缓存可能会存储多个响应. 如第 4.1 节所述, 缓存使用 Vary 响应头字段中的信息, 将原始请求的某些头字段也纳入缓存键, 以区分这些响应.

缓存可能会将其他材料纳入缓存键. 例如, 用户代理缓存可能包含引用站点的身份, 从而对缓存进行"双重键控 (double keying)", 以避免某些隐私风险 (见第 7.2 节).

最常见的是, 缓存存储检索请求的成功结果: 即对 GET 请求返回的 200 (OK) 响应, 其中包含目标资源的表示 (representation) (见 [HTTP] 第 9.3.1 节). 不过, 如果某个方法的定义允许这种缓存, 并定义了适合作为缓存键的内容, 也可以存储重定向, 否定结果 (例如 404 (Not Found)), 不完整结果 (例如 206 (Partial Content)), 以及 GET 以外方法的响应.

当缓存无法联系源服务器 (origin server), 或无法为请求找到转发路径时, 缓存处于"断开连接 (disconnected)"状态. 在某些情况下, 断开连接的缓存可以提供陈旧响应 (stale response) (第 4.2.4 节).