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

Don*_*mmy 6 javascript apache html5 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>
Run Code Online (Sandbox Code Playgroud)

以上使得所有浏览器都不会缓存应用程序以供离线使用.

有没有解决的办法?

The*_*hew 1

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

<script type="text/javascript" src="/path/to/script.js?v=10"></script>  
Run Code Online (Sandbox Code Playgroud)

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

我根据同事的现有实践采用了这种方法。