我正在使用谷歌浏览器,我注意到每次执行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
标题?
答案 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
标题一起发送的。