javascript - 强制 AJAX 请求与服务器重新验证缓存,而不完全重新加载

标签 javascript ajax http browser-cache cache-control

我有一个网络应用程序可以让浏览器长时间缓存 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/

相关文章:

javascript - 提交表单结果后,如何将其发布到另一个 URL?

java - 400 - 错误的请求 - 请求在语法上不正确

javascript - 如何在 HTML 表格中设置单元格的背景?

javascript - JqG​​rid 表在编辑和保存任何行后重新加载

javascript - JQuery History.js 插件不替换 HTML4 和 HTML5 浏览器中一页的状态

http - 为什么人们对所有媒体类型都使用 accept header

angularjs - 从 80 端口到另一个端口的 Angular $http 请求

JavaScript "compilers"

javascript - 正则表达式拆分 iif 表达式

javascript - 从 PHP 发送和接收数据