跳到主要内容

2. 缓存操作概述

正确的缓存操作在保留 HTTP 传输语义 ([RFC7231]) 的同时, 消除对缓存中已持有信息的传输. 尽管缓存完全是 HTTP 的一个可选 (OPTIONAL) 特性, 但可以假定重用缓存响应是可取的, 并且在没有要求或本地配置阻止时, 这种重用就是默认行为. 因此, HTTP 缓存要求关注的是防止缓存存储不可重用的响应或不适当地重用已存储的响应, 而不是强制缓存始终存储和重用特定的响应.

每个缓存条目由一个缓存键 (cache key) 以及与使用同一键的先前请求相对应的一或多个 HTTP 响应组成. 最常见的缓存条目形式是检索请求的成功结果: 即对 GET 请求的 200 (OK) 响应, 其中包含由请求目标所标识资源的表示 (representation) ([RFC7231] 第 4.3.1 节). 不过, 也可以缓存永久重定向、否定结果 (例如 404 (Not Found))、不完整结果 (例如 206 (Partial Content)), 以及对 GET 以外方法的响应, 前提是该方法的定义允许此类缓存, 并定义了适合用作缓存键的内容.

主缓存键 (primary cache key) 由请求方法和目标 URI 组成. 然而, 由于当今常用的 HTTP 缓存通常只限于缓存对 GET 的响应, 许多缓存干脆拒绝其他方法, 只使用 URI 作为主缓存键.

如果请求目标受内容协商 (content negotiation) 支配, 其缓存条目可能由多个已存储响应组成, 每个响应通过一个二级键 (secondary key) 加以区分, 该键基于原始请求的选择头字段的取值 (第 4.1 节).