【问题标题】:Is it possible to test whether XmlHttpRequest will hit the cache instead of the server?是否可以测试 XmlHttpRequest 是否会命中缓存而不是服务器?
【发布时间】:2009-12-15 00:44:11
【问题描述】:

在使用 Javascript 的 IE 中,有没有办法知道使用 XmlHttpRequest 对 URL 执行常规 GET 是否会从缓存中提取其数据或访问服务器?

如果没有办法提前知道,有没有办法告诉 XmlHttpRequest 不要访问服务器,而是尽可能从缓存中拉取?

澄清一下:我了解浏览器缓存的工作原理,我试图了解是否可以使用 javascript 提前确定 ajax 调用是否会使用浏览器缓存。就我而言,我正在编写一个 JS 库,所以我不控制服务器的行为,所以我在先验知道什么是缓存设置/标头方面受到很大限制。

【问题讨论】:

  • 如果它在缓存中,它会从缓存中拉出,你不必告诉浏览器这样做。现在,通常需要相反​​的情况:即使它在缓存中,有时您也希望从服务器中重新获取它。 IOW:我不明白你的问题。
  • 我的问题是:我需要知道它将从缓存中提取。我正在提供一个第 3 方 JS 库,它希望读取 response.text 而不调用对服务器的调用,这可能会产生副作用。我可以在 response.text 获得的唯一方法是发出一个“假”ajax 请求,如果我确定它不会超过缓存。

标签: javascript internet-explorer caching xmlhttprequest


【解决方案1】:

这实际上是体面的 HTTP 用户代理在默认情况下所做的:只有当您请求的位置没有有效的缓存条目时,它们才会从服务器获取。因此,控制(或至少了解)缓存行为的最佳选择是查看 Web 服务器为您在脚本中请求的位置返回的 HTTP 缓存标头。

【讨论】:

  • 我提供了一个第 3 方 JS 库,它需要在没有访问服务器的情况下访问 response.text(希望避免副作用,因为它不是我的服务器/应用程序)。为了做到这一点,如果我确信它不会通过缓存,我会进行一个“虚拟”Ajax 调用。所以问题仍然存在,是否有可能知道浏览器是否有缓存中的 URL,并会使用它?否则,我的代码不能代表主机页面进行 ajax 调用。
  • 另外,我是 StackOverflow 的新手,但我怀疑因为这个答案有一个赞成票,所以我不太可能获得更多的眼球。在我寻求这是否可以通过 JS 确定时,您是否有机会对此投反对票? :)
  • 我不知道有任何 API 可以让您确定浏览器缓存的内容,抱歉。只要您不同意我的回答是您认为最好的回答,您的问题就会继续列在“未回答”中。无论如何,我认为这不会有太大的不同,因为到目前为止,您的问题可能已经排在列表的最后了。
【解决方案2】:

在我看来,您永远无法确定是否缓存了某些内容,因为即使在某一时刻,它也可能在之后立即失效。您可以做的是通过向您的请求添加随机查询字符串参数来强制浏览器访问服务器。

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2022-11-25
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多