是什么决定了HTTP缓存的请求等价?

时间:2015-06-21 23:25:33

标签: http caching

我觉得这对谷歌来说很容易,但是我无法找到它:从HTTP缓存的角度来看,是什么决定了两个请求是否相同?

我想一个要素就是他们的网址需要相同;例如,重新排列(但不更改)查询字符串参数似乎会导致缓存未命中。据推测,他们需要具有相同的Accept标题。还有什么可以确定是否可以从缓存中提供请求?

3 个答案:

答案 0 :(得分:1)

这主要是在此RFC中描述的:https://tools.ietf.org/html/rfc7234#section-4

摘要:

  • 方法
  • 完整的uri
  • 与缓存相关的标头会影响是否存储了某些内容。
  • 出现在Vary响应标头列表中的任何 request 标头。

是否为特定用户(例如浏览器)或多个用户(例如代理)进行缓存也很重要。

答案 1 :(得分:0)

有像If-match, If-unmodified-since, If-none-match and If-modified-since这样的缓存控制的所有条件请求。例如,If-modified-since以这种方式工作:假设您已经请求了一个页面,现在您想重新加载它。如果标题存在,那么只有在自指示为If-modified-since的值的日期之后修改了新页面时,才会从服务器发回新页面,否则将返回304(not-modified)状态。 接受和接受 - *是内容协商所必需的,就像应该返回页面的语言一样。

有关条件请求的更多信息,请访问:https://tools.ietf.org/html/rfc7232#page-13

答案 2 :(得分:0)

我也为此感到挣扎。将我的Google搜索更改为使用“ http缓存键”可以产生更好的结果。使用URL似乎是最常见的。查询字符串通常也包括在内。

https://support.cloudflare.com/hc/en-us/articles/115004290387-Using-Custom-Cache-Keys描述了cloudflare的默认值,并讨论了使用不同密钥的影响。

另一个有用的参数是标识要缓存的资产的类型。或将其保持打开状态(不过滤)

HTTP规范(https://tools.ietf.org/html/rfc7234)中特别提到了“授权”标头,需要对其进行处理。

在进一步阅读后,我注意到标准(https://tools.ietf.org/html/rfc7234#section-4.1)中有关“辅助密钥”的部分以及响应中“ Vary”标头的使用。 “ Vary”响应标头中显示的标头必须在原始请求和新请求中都匹配,以使缓存声明为匹配。

对于主键,标准说:“主缓存键由请求方法和目标URI组成。”在https://tools.ietf.org/html/rfc7234#section-2