当前位置: 首页 > 知识库问答 >
问题:

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

都超英
2023-03-14

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

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

共有3个答案

廉展鹏
2023-03-14

显然,我们还可以使用资源定时API来确定是否从浏览器缓存中提供了某些内容;如果transferSize为0(并且编码的BodySize为

这似乎是一个比其他更好的解决方案,只要你在处理一个支持它的浏览器。

楼盘: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/transferSize

贝财
2023-03-14

检查返回的状态代码是否为 304(未修改)在 onready 状态更改函数中。大致如下:

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState==4 && xmlhttp.status==304)
    {
      alert("Cached");
    }
} 
龚联
2023-03-14

答案是日期标题

  • 如果日期标头早于发送日期,则响应来自缓存
  • 如果日期标题晚于发送请求的日期,则响应是新的

例如

    < li >来自缓存:请求在11:00发送,响应日期为10:59 < li >无缓存:请求于11:00发送,响应日期为11:01
 类似资料:
  • 问题内容: 我想知道是否有一种方法可以检测何时从本地缓存返回响应?可能吗? 解决方案应该是通用的,适用于无条件的请求。在这种情况下,响应代码始终为200 OK,但是XHR返回用于第二个请求的缓存资源(例如,第一个响应包含Expires标头,因此无需在到期日期之前向服务器请求新资源)。 问题答案: 答案是日期标题 如果日期标头在发送日期之前,则响应来自缓存。 如果日期报头在发送请求的日期之后,则响应

  • 我搜索了如何在Angular2中缓存XHR,发现使用了< code>share()方法。但是我创建的服务并不像我预期的那样工作。 我错过了什么?(当然,导入所需的类和接口)

  • null 根据密钥在缓存中查找 如果找到,则从缓存返回结果 如果未找到,则返回NULL 我不想在cache-miss的情况下更新缓存,有没有办法使用spring注释来做到这一点

  • 我希望有人能对我一直在研究但没有取得多大进展的一些事情有所帮助。 我想利用 NSURLCache 来返回我在 iOS 应用程序中进行的 API 调用的缓存响应。当设备联机时,如果缓存的响应足够新,我想返回它,否则从远程获取。当设备脱机时,我希望立即返回缓存的响应(如果有),无论其年龄如何。 我正在使用AFNetworking。我正在对我控制的服务器进行API调用。协议是HTTPS。响应头当前为。我

  • 我读到了关于和的相互矛盾的语句。 这个答案说: 使用must-revalidate时,如果服务器不响应重新验证请求,浏览器/代理应该返回504错误。在没有缓存的情况下,它只显示缓存的内容 然而,“只显示缓存的内容”而不进行重新验证与https://datatracker.ietf.org/doc/html/RFC7234#section-5.2.1.4中的内容相矛盾: “no-cache”requ

  • 我有以下简化的处理程序函数(Spring WebFlux和使用静态编程语言的函数API)。然而,我需要一个提示,如何检测空的Flux,然后在Flux为空时使用noContent()进行404。