2012-03-16 117 views
15

我使用谷歌Chrome和我注意到,每一次我做一个XHR请求时,我碰到下面的头放在请求:的jQuery的XmlHttpRequest的Cache-Control被忽略

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

如果你读的规范http://www.w3.org/TR/XMLHttpRequest/它说以下

如果用户代理实现HTTP缓存应该尊重作者请求头 缓存控制报头(例如缓存控制: 无缓存绕过高速缓存)。除非最终用户明确要求 这样的行为(例如通过重新加载页面),否则它不能自动发送缓存控制或附件请求标头。

嗯,我想以下几点:

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

正如你看到的,我明确地设置Cache-Control头地让我的资源的缓存副本的希望。好吧,Chrome似乎忽略了Cache-Control标头。

发出XHR请求时是否可以不发送Cache-Control: no-cache标头?

回答

46

这是一个愚蠢的错误。我将开发工具设置为“禁用缓存”。这就是为什么它总是添加缓存控制标题。如果发生这种情况,请确保您确认该框未被选中。

劳尔

+1

是的,请注意Firebug在“Net”菜单中也有“禁用浏览器缓存”。我也被这一个咬了。 – harpo 2013-09-12 15:35:03

+0

我一直想弄清楚为什么本机提取()没有从缓存中返回数据,即使服务器正确设置了缓存控制标题。谢谢你帮助纠正这个疏忽,这让我很生气。 – 2016-01-15 23:13:20

+0

我花了很长时间试图追查下来。谢谢! – 2016-12-05 22:22:46

3

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

打开网络选项卡,然后再尝试这种在控制台此页上:

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

检查网络选项卡再次,单击您刚才提出的要求,并点击“标题”选项卡。您会看到该请求是通过您提供的Cache-Control标题发送的。

+0

对不起。这是我自己的错。我应该检查开发人员工具以确保我没有禁用缓存。 – HaxElit 2012-03-26 14:19:39