可能是一个愚蠢的问题,但我搜索了很多没有结果。我知道如何在服务器响应中设置缓存控制,但是如何在ajax请求中更改缓存控制的值? 注意:我希望浏览器使用它的缓存。不希望它从服务器获取更新的json ..这是我想要做的全部事情。
答案 0 :(得分:12)
您可以使用headers
属性,如下所示:
$.ajax({
...
headers: {
'Cache-Control': 'max-age=1000'
}
...
});
请注意,cache
属性与Cache-Control
标题没有任何共同之处,它只是cache buster(将?_={timestamp}
附加到GET参数)并且只能正常使用GET
和HEAD
请求。
无论如何,有用的东西: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 请求中(因此在响应标头中,而不是在请求标头中)。