如何在清单更新时允许浏览器更新脚本文件但允许缓存?

时间:2015-09-25 21:19:15

标签: javascript html5 apache caching html5-appcache

我尝试了两种不同的方式,但都不起作用:

1。更新清单,以便浏览器看到更改和更新

这将更新除JavaScript文件之外的所有文件。浏览器发现存在差异,下载所有内容(包括JavaScript文件),但使用缓存版本的JavaScript文件。

2。发送无缓存标头(请参阅下面的代码)以停止缓存脚本文件

这会导致浏览器抛出错误而不再缓存任何内容。它说发生了ApplicationCache错误。

无缓存代码:

<filesMatch "\.(js)$">
    FileETag None
    <ifModule mod_headers.c>
        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"
    </ifModule>
</filesMatch>

上述内容使所有浏览器缓存该应用以供离线使用。

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

我没有足够的视角来说明这是否是最佳实践,但每当我们的团队进行Javascript更改时,我们会在路径末尾增加一个查询字符串变量。 / p>

<script type="text/javascript" src="/path/to/script.js?v=10"></script>  

请注意src属性末尾的 v = 10 。这意味着浏览器正在检索不同的文件,因此会绕过缓存。

我按照现有的同事做法选择了这种方法。