如何控制ajax请求中的缓存控制
Posted
技术标签:
【中文标题】如何控制ajax请求中的缓存控制【英文标题】:How to control cache-control in ajax request 【发布时间】:2016-01-28 04:32:50 【问题描述】:这可能是一个愚蠢的问题,但我搜索了很多没有任何结果。我知道如何在服务器响应中设置缓存控制,但是如何更改 ajax 请求中的缓存控制值? 注意:我希望浏览器使用它的缓存。我不希望它从服务器获取更新的 json ......这就是我想要做的全部事情。
【问题讨论】:
在ajax中设置cache:false
。
感谢您的回复,但我希望浏览器使用它的缓存。不希望它获取更新的 json
【参考方案1】:
你可以使用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)?
【讨论】:
谢谢,但是当我更改为相同时,请求显示:缓存控制:无缓存。并且我的请求中没有使用缓存(默认情况下是这样) 是的,我完全按照您的回答做了。还尝试了公共和私有,无论我将其更改为什么,它都会在浏览器控制台中显示无缓存:( 确保您没有在开发者工具中禁用缓存,在 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 请求中(所以在响应标头中,而不是在请求标头中)。
【讨论】:
以上是关于如何控制ajax请求中的缓存控制的主要内容,如果未能解决你的问题,请参考以下文章
确保控制器方法实际上是由 ajax 或 mvc 中的 POST 请求调用的
如何将 JQuery AJAX 请求中的字符串值传递给 Spring Boot 控制器?
IE浏览器下使用AJAX登陆接口请求缓存与登陆不了的问题解决