14

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

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

4

3 回答 3

10

答案是日期标题

  • 如果日期标头在发送日期之前,则响应来自缓存。
  • 如果日期标头在发送请求的日期之后,则响应是新鲜的。

例如

  • 来自缓存:请求于 11:00 发送,响应日期为 10:59
  • 无缓存:请求在 11:00 发送,响应日期为 11:01
于 2013-04-16T15:48:26.803 回答
1

在onreadystatechange函数中查看返回的状态码是否为304(未修改)。类似于以下内容:

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState==4 && xmlhttp.status==304)
    {
      alert("Cached");
    }
} 
于 2012-10-11T00:37:21.900 回答
1

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

只要您使用的是支持它的浏览器,这似乎是比其他解决方案更好的解决方案。

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

于 2016-12-20T18:39:13.223 回答