我天真地认为,如果我启用了缓存控制,并且客户端使用不同的头参数值发出了2个不同的请求,那么浏览器/服务器将独立地为两个请求提供服务,而不进行任何缓存。
我发现痛苦的方式实际上并非如此。即使请求标头的参数值发生更改,第一个响应仍会被缓存并为第二个请求提供服务。
是否有任何明确的缓存控制行为列表构成“缓存命中”以及什么构成“缓存未命中”?
我目前可以想到的一些不同因素:
我可以从我的经验中看出,为确定请求是否为缓存命中,数字6肯定会被忽略。
根据我所做的一些研究,在确定某些内容是否为缓存命中时,似乎会对因子1和2进行评估。
其他人呢?
答案 0 :(得分:3)
有关规范,请参阅RFC 7234。
特别是:
主缓存密钥由请求方法和目标URI组成。
另请注意:
当提出请求时,缓存不得重用已存储的 回应,除非: ... 选择由存储的响应指定的标题字段(如果有) 与所呈现的相匹配(参见第4.1节)
还有:
当缓存接收到存储可以满足的请求时 具有Vary头字段的响应([RFC7231]的第7.1.4节), 除非所有选择标题,否则它不得使用该响应 由Vary标题字段提名的字段在原始字段中匹配 请求(即与存储的响应相关的请求)和 提出请求。
也就是说,除非服务器以Vary:
响应并指定该标头,否则假定标头不重要。