jQuery XmlHttpRequest缓存控制被忽略

16

我正在使用 Google Chrome,注意到每次进行 XHR 请求时都会在请求上添加以下标头:

Cache-Control: no-cache
Pragma: no-cache

如果您阅读http://www.w3.org/TR/XMLHttpRequest/中的规范,它将说明以下内容:

如果用户代理实现了HTTP缓存,则应该遵守作者请求头中的Cache-Control头部(例如,Cache-Control:no-cache)以绕过缓存。除非最终用户明确要求此行为(例如通过重新加载页面),否则它不应自动发送Cache-Control或Pragma请求头。

我正在尝试以下操作:

$.ajax(myUrl, {
    type: 'get',
    dataType: 'json'
    cache: true,
    headers: {
      'Cache-Control': 'max-age=200' 
    }
  })

正如您所看到的,我明确设置了Cache-Control头,希望获得我的资源的缓存副本。然而,Chrome似乎忽略了Cache-Control头。

在发出XHR请求时,是否可能不发送Cache-Control: no-cache头?

2个回答

47

这是一个很愚蠢的错误。我将开发者工具设置为“禁用缓存”。这就是为什么它总是添加缓存控制标头的原因。如果您遇到了类似情况,请确保取消选中该框。

Raul


1
是的,请注意Firebug在“Net”菜单中也有“禁用浏览器缓存”选项。我也曾被这个问题困扰过。 - harpo
我一直在尝试弄清楚为什么本地的fetch()没有从缓存中返回数据,即使服务器正确设置了Cache-Control头信息。感谢您帮助纠正这个疏忽,它让我发疯了。 - Cody Moniz
我花了很长时间来追踪这个问题。谢谢! - ty.

4
我刚刚测试了一下,你的代码没问题,只是缺少一个逗号。
打开网络选项卡,然后在此页面上的控制台中尝试以下操作:
$.ajax('http://stackoverflow.com/', {
    type: 'get',
    dataType: 'json',
    cache: true,
    headers: {
        'Cache-Control': 'max-age=123' 
    }
})

检查网络选项卡,再次点击刚刚发出的请求,然后点击“标头”选项卡。您会看到该请求使用您提供的Cache-Control标头发送。

是的,抱歉。那是我的错。我应该检查开发者工具,确保我没有禁用缓存。 - HaxElit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接