我正在努力确保访问我网站的访问者看到最新版本。为此,我编写了一个脚本来重命名相应的文件和请求,以便它们在构建时附加一个新的版本号。这包括索引文件,我们称之为index-v123.html
。
我已经上传了这个内置的源代码,并通过包含
将我的apache2
服务器指向新的索引文件
DirectoryIndex index-v123.html
在我的apache2.conf
中。我重新启动了它,当以Chrome隐身模式或硬刷新方式查看网站时,我可以看到所有新文件都已加载,网站按预期工作。
我的问题是,在我的普通浏览器中,当我访问该网址时,我仍然会加载index.html
的缓存版本。显然更改DirectoryIndex
没有说服客户转到我希望的新索引文件...
我可以做任何事情来实现这个目标吗?
(也可能相关:我正在使用Polymer 2.0运行渐进式Web应用程序,service-worker.js
自动构建polymer build
。)
答案 0 :(得分:0)
结果证明这是一个服务工作者问题:service-worker.js
正在客户端缓存,因此提供过时的内容,就好像客户端处于脱机模式一样。只能通过取消注册工作人员来更新。解决方案是在apache2服务器端的服务工作者上实现max-age=0
:
<Files index.html|service-worker.js>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</Files>
感到惊讶的是,在某处的聚合物构建/生产文档中没有更好地突出显示。作为参考,在服务工作者的google primer上说:
遵守服务工作者脚本上的缓存标头(最多为 获取更新时的24小时)。我们将进行此选择 行为,因为它吸引了人们。您可能希望最大年龄为0 在您的服务工作者脚本上。