如何检测XHR何时返回缓存资源?

时间:2012-10-11 00:23:42

标签: ajax http http-headers xmlhttprequest http-caching

我想知道是否有办法检测何时从本地缓存返回响应?可能吗?

解决方案应该是通用的,适用于无条件请求。在这种情况下,响应代码始终为200 OK,但XHR返回第二个请求的缓存资源(例如,第一个响应包含Expires头,因此无需在到期日期之前向服务器请求新资源)。

3 个答案:

答案 0 :(得分:5)

答案是日期标题

  • 如果日期标题位于发送日期之前,则响应将来自缓存。
  • 如果日期标题是在发送请求的日期之后,那么响应是新鲜的。

e.g。

  • 来自缓存:请求是在11:00发送的,响应日期是10:59
  • 没有缓存:请求是在11:00发送的,响应日期是11:01

答案 1 :(得分:0)

检查onreadystatechange函数中返回的状态代码是否为304(未修改)。有点像:

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState==4 && xmlhttp.status==304)
    {
      alert("Cached");
    }
} 

答案 2 :(得分:0)

显然我们也可以使用Resource Timing API来确定某些内容是否来自浏览器缓存;如果transferSize为0(并且encodedBodySize为> 0)那么这就是缓存命中。

只要您处理a browser that supports it,这似乎是比其他解决方案更好的解决方案。

参考:https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/transferSize