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

时间:2015-11-27 18:24:57

标签: rest http https cache-control

我天真地认为,如果我启用了缓存控制,并且客户端使用不同的头参数值发出了2个不同的请求,那么浏览器/服务器将独立地为两个请求提供服务,而不进行任何缓存。

我发现痛苦的方式实际上并非如此。即使请求标头的参数值发生更改,第一个响应仍会被缓存并为第二个请求提供服务。

是否有任何明确的缓存控制行为列表构成“缓存命中”以及什么构成“缓存未命中”?

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

  1. Query parameter keys
  2. 查询参数值
  3. 表单参数键
  4. 表单参数值
  5. 标题参数键
  6. 标头参数值
  7. 我可以从我的经验中看出,为确定请求是否为缓存命中,数字6肯定会被忽略。

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

    其他人呢?

1 个答案:

答案 0 :(得分:3)

有关规范,请参阅RFC 7234

特别是:

  

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

另请注意:

  

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

还有:

  

当缓存接收到存储可以满足的请求时      具有Vary头字段的响应([RFC7231]的第7.1.4节),      除非所有选择标题,否则它不得使用该响应      由Vary标题字段提名的字段在原始字段中匹配      请求(即与存储的响应相关的请求)和      提出请求。

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