我有一个 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 标头执行此操作,因此欢迎使用我不知道的任何其他方法!