我想知道是否有一种方法可以检测何时从本地缓存返回响应?可能吗?
解决方案应该是通用的,并且适用于无条件请求。在这种情况下,响应代码始终为 200 OK,但 XHR 为第二个请求返回一个缓存的资源(例如,第一个响应包含 Expires 标头,因此无需在过期日期之前向服务器请求新资源)。
我想知道是否有一种方法可以检测何时从本地缓存返回响应?可能吗?
解决方案应该是通用的,并且适用于无条件请求。在这种情况下,响应代码始终为 200 OK,但 XHR 为第二个请求返回一个缓存的资源(例如,第一个响应包含 Expires 标头,因此无需在过期日期之前向服务器请求新资源)。
答案是日期标题
例如
在onreadystatechange函数中查看返回的状态码是否为304(未修改)。类似于以下内容:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==304)
{
alert("Cached");
}
}
显然,我们还可以使用Resource Timing API来确定是否从浏览器缓存中提供了某些内容;如果 transferSize 为 0(并且 encodedBodySize > 0),那么这是缓存命中。
只要您使用的是支持它的浏览器,这似乎是比其他解决方案更好的解决方案。
参考:https ://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/transferSize