2. 缓存操作概述 (Overview of Cache Operation)
正确的缓存操作在保留 HTTP 传输([RFC7231])语义的同时,消除了对已存在于缓存中的信息的传输。尽管缓存是 HTTP 中完全可选(OPTIONAL)的特性,但可以假设重用缓存的响应是可取的,并且如果没有任何要求或本地配置阻止,这种重用是默认行为。因此,HTTP 缓存的要求侧重于防止缓存存储不可重用的响应或不恰当地重用已存储的响应,而不是强制要求缓存始终存储和重用特定的响应。
每个缓存条目(cache entry)由一个缓存键(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)约束,其缓存条目可能由多个已存储的响应组成,每个响应通过原始请求的选择头字段(selecting header fields)值的二级键(secondary key)来区分(第 4.1 节)。