9

我有一个 Web 应用程序可以让浏览器长时间缓存 AJAX 请求结果。当检测到可能的修改时,我发现了如何发出完全绕过缓存的请求。但我想让用户触发数据刷新。

在这种情况下,我希望浏览器与服务器检查缓存是否停止,但如果不是,则使用它(即,如果服务器以 304 代码响应)。目标是节省加载时间,因为数据量很大。

服务器在所有响应中包含以下标头:

Cache-Control: private, max-age=604800
Last-Modified: ... # actual last modification date

通过在请求中使用以下 HTTP 标头,我设法在 Chrome(尚未测试其他浏览器)中完全爆破缓存的对象:

Cache-Control: max-age=0
If-Last-Modified: Tue, 01 Jan 1970 01:00:00 +0100

If-Last-Modified条线是真正有影响的线。Chrome 似乎忽略Cache-Control了请求中的标头。

我还发现,Cache-Control: must-revalidate在服务器响应中使用会强制浏览器针对每个请求向服务器验证其缓存。

但是有没有办法重新验证一个精确的请求,由客户端决定

请注意,我并不特别喜欢使用 HTTP 标头执行此操作,因此欢迎使用我不知道的任何其他方法!

4

1 回答 1

2

您可以添加一个 url 参数,该参数的值基于时间来清理缓存以获取一个精确的请求。

$.ajax({
    url:"/questions?nocache="+Date.now(),
    "success":function(data){
         console.log(data);
    }
});
于 2013-07-26T04:00:58.740 回答