我正在努力确保我的网站的访问者看到最新的版本。为此,我编写了一个脚本来重命名适当的文件和请求,以便它们在构建时附加一个新的版本号。这包括索引文件,我们称它为index-v123.html
。
我已经上传了这个构建的源代码,并通过包含以下内容将我的apache2
服务器指向新的索引文件
DirectoryIndex index-v123.html
在我的apache2.conf
里。我已经重启了它,当我在chrome匿名模式或硬刷新模式下查看网站时,我可以看到所有新文件都已加载,网站工作正常。
我的问题是,在我正常的浏览器中,当我访问网址时,我仍然加载index.html
的缓存版本。显然,更改DirectoryIndex
并没有说服客户端像我所希望的那样转到新的索引文件……
那么我能做些什么来实现这一点呢?
(也可能是相关的:我正在运行一个渐进式的web应用程序,使用Polayer2.0,它有一个由polymer build
自动构建的service-worker.js
。)
发布于 2018-05-30 10:07:22
这被证明是一个服务工作者问题: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。
https://stackoverflow.com/questions/50527052
复制相似问题