为主页设置缓存头后,强制浏览器重新加载

问题描述

我有一个SPA,并且意外地在启动时不仅为资产设置了缓存标头,还为域的主页设置了缓存标头(例如www.mysite.com)。

我的JS和CSS资产已进行版本控制,它们在构建时可以正确获得唯一的文件名以破坏缓存,但是问题是,由于我的主页也被浏览器缓存,因此访问者永远都无法获取更新的HTML。他们只是总是得到请求旧资产的旧HTML。

我现在已经修复了标题,但以前访问过我的网站的所有用户都获得了旧版本,即使他们在浏览器中单击“重新加载”也是如此。当我打开DevTools并单击“清空缓存并重新加载硬盘”时,我设法强制使用它,但这不是我的用户通常会执行的操作。所以问题是-设置一次缓存标头后,我是否有机会强迫浏览器重新加载域上的主页?

下面是老访客得到的标题。我认为max-age = 86400使他们第二天重新加载页面,但是显然不是这样,因为即使是一周前访问过我的人仍然可以使用旧版本。

access-control-allow-origin: *
cache-control: public,max-age=86400
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Fri,21 Aug 2020 09:43:58 GMT
etag: W/"95e-173e97039b2"
last-modified: Thu,13 Aug 2020 20:08:32 GMT
server: Nginx/1.17.3
status: 200
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: Express
x-xss-protection: 1; mode=block

非常感谢您提供任何建议。

解决方法

因此,最后我设法通过添加修改后的etag标头对其进行了修复。似乎将cache-control切换为no-store并从整体上删除了etag并没有帮助,但是将cache-control: no-storeetag设置为不同的值会强制测试Chrome浏览器重新加载。