缓存控制和标头/表单/查询参数

RvP*_*vPr 4 rest https http cache-control

我天真地假设,如果我启用了缓存控制,并且客户端使用不同的标头参数值发出了 2 个不同的请求,则浏览器/服务器将独立地服务这两个请求,而无需任何缓存。

我痛苦地发现这实际上不是真的。即使请求标头的参数值发生变化,第一个响应仍然会被缓存并为第二个请求提供服务。

是否有关于哪些构成“高速缓存命中”以及哪些构成“高速缓存未命中”的高速缓存控制行为的明确列表?

我目前可以想到的一些不同因素:

  1. 查询参数键
  2. 查询参数值
  3. 表单参数键
  4. 表单参数值
  5. 标头参数键
  6. 标头参数值

根据我的经验,为了确定请求是否缓存命中,数字 6 肯定会被忽略。

根据我所做的一些研究,在确定某些内容是否缓存命中时似乎会评估因素 1 和 2。

其他人呢?

Joe*_*Joe 7

有关规范,请参阅RFC 7234 。

尤其:

主缓存键由请求方法和目标 URI 组成。

另请注意:

当提出请求时,缓存不得重用存储的响应,除非: ...选择由存储的响应指定的头字段(如果有)与出现的字段匹配(参见第 4.1 节)

并且:

当缓存收到一个可以由具有 Vary 头字段的存储响应来满足的请求时([RFC7231] 的第 7.1.4 节),它不得使用该响应,除非所有选择头字段都由 Vary 头字段指定原始请求(即与存储的响应相关联的请求)和所呈现的请求都匹配。

也就是说,除非服务器响应并指定该标头,否则假定标头不重要Vary: