【问题标题】:How to control cache-control in ajax request如何控制ajax请求中的缓存控制
【发布时间】:2016-01-28 04:32:50
【问题描述】:

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

【问题讨论】:

  • 在ajax中设置cache:false
  • 感谢您的回复,但我希望浏览器使用它的缓存。不希望它获取更新的 json

标签: jquery html css ajax


【解决方案1】:

你可以使用headers属性,像这样:

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

请记住,cache 属性与 Cache-Control 标头没有任何共同之处,它只是一个 cache buster(将 ?_={timestamp} 附加到 GET 参数)并且只能在 GETHEAD 请求中正常工作.

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

【讨论】:

  • 谢谢,但是当我更改为相同时,请求显示:缓存控制:无缓存。并且我的请求中没有使用缓存(默认情况下是这样)
  • 是的,我完全按照您的回答做了。还尝试了公共和私有,无论我将其更改为什么,它都会在浏览器控制台中显示无缓存:(
  • 确保您没有在开发者工具中禁用缓存,在 Chrome:网络选项卡上,应取消勾选“禁用缓存”。这是一个常见的错误。
  • 我建议你看看这篇文章并确保标题值的格式正确。 (见更新的答案)
  • 你应该得到正确的答案:) 将添加另一个关于我的 json 问题的问题。谢谢
【解决方案2】:

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

所以只需在 devtools 中关闭 Disable Cache 功能就可以了(正如 kav 的 cmets 中所述)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2021-11-29
    • 2019-08-04
    相关资源
    最近更新 更多