我有一个网络应用程序可以让浏览器长时间缓存 AJAX 请求结果。当检测到可能的修改时,我发现了如何发出完全绕过缓存的请求。但我想让用户触发数据刷新。
在这种情况下,我希望浏览器检查服务器是否缓存已停止但如果不是则使用它(也就是说,如果服务器响应 304 代码) .目标是节省加载时间,因为数据量很大。
服务器在所有响应中包含以下 header :
Cache-Control: private, max-age=604800
Last-Modified: ... # actual last modification date
我设法通过在请求中使用以下 HTTP header ,在 Chrome 中完全爆破缓存对象(尚未测试其他浏览器):
Cache-Control: max-age=0
If-Last-Modified: Tue, 01 Jan 1970 01:00:00 +0100
If-Last-Modified
行是真正有效的行。 Chrome 似乎忽略了请求中的 Cache-Control
header 。
我还发现,在服务器响应中使用 Cache-Control: must-revalidate
会强制浏览器针对每个 请求向服务器验证其缓存。 p>
但是否有任何方法可以仅针对一个由客户端决定的精确请求进行重新验证?
请注意,我并不是特别喜欢使用 HTTP header 来执行此操作,因此欢迎使用我不知道的任何其他方法!
最佳答案
您可以添加一个 url 参数,该参数基于时间来为一个精确的请求清理缓存。
$.ajax({
url:"/questions?nocache="+Date.now(),
"success":function(data){
console.log(data);
}
});
关于javascript - 强制 AJAX 请求与服务器重新验证缓存,而不完全重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308953/