如何在ajax请求中控制缓存控制

时间:2015-10-28 11:57:07

标签: jquery ajax html5 css3

可能是一个愚蠢的问题,但我搜索了很多没有结果。我知道如何在服务器响应中设置缓存控制,但是如何在ajax请求中更改缓存控制的值? 注意:我希望浏览器使用它的缓存。不希望它从服务器获取更新的json ..这是我想要做的全部事情。

enter image description here

2 个答案:

答案 0 :(得分:12)

您可以使用headers属性,如下所示:

$.ajax({
...
headers: {
     'Cache-Control': 'max-age=1000' 
}
...
});

请注意,cache属性与Cache-Control标题没有任何共同之处,它只是cache buster(将?_={timestamp}附加到GET参数)并且只能正常使用GETHEAD请求。

无论如何,有用的东西:How to set HTTP headers (for cache-control)?

答案 1 :(得分:0)

真正的答案是,当您在“网络”面板中看到 Cache-Control: max-age=0 时,这很可能是浏览器为避免缓存而采取的措施。 默认情况下,这不是 jQuery 正在做的事情。所以改变标题没有意义。所以你可以简单地使用 $.getJSON() 和 HTTP 缓存将工作...

因此,只需在 devtools 中关闭禁用缓存功能,您应该就可以了(如 kav 的评论中所述)。

但还有另一个问题。缓存控制标头仅适用于普通 200 请求(成功)。大多数错误不会在 Firefox 中缓存。无论您的服务器说什么,Firefox 都会忽略响应中的 Cache-control 标头。所以无论你做什么 Firefox 都不会缓存 404 或 400 请求。您可以使用 410 (Gone) 而不是 404。但这也需要在服务器端完成,而不是在 AJAX 请求中(因此在响应标头中,而不是在请求标头中)。