jQuery XmlHttpRequest忽略Cache-Control

时间:2012-03-16 21:36:28

标签: javascript google-chrome jquery

我正在使用谷歌浏览器,我注意到每次执行XHR请求时,我都会在请求中添加以下标题:

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

如果您在http://www.w3.org/TR/XMLHttpRequest/阅读规范,则说明以下内容

  

如果用户代理实现HTTP缓存,则应该尊重   作者请求标头中的缓存控制标头(例如,缓存控制:   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 个答案:

答案 0 :(得分:47)

这是一个愚蠢的错误。我将Developer Tools设置为“Disable Cache”。这就是它总是添加缓存控制头的原因。如果发生这种情况,请确保确保未选中此框。

劳尔

答案 1 :(得分:4)

我刚测试过它,你的代码工作正常,除了缺少逗号。

打开网络标签,然后在此页面的控制台中尝试此操作:

$.ajax('http://stackoverflow.com/', {
    type: 'get',
    dataType: 'json',
    cache: true,
    headers: {
        'Cache-Control': 'max-age=123' 
    }
})

再次检查网络标签,点击您刚刚提出的请求,然后点击“标题”标签。您会看到请求是与您提供的Cache-Control标题一起发送的。