如何从服务器端强制刷新客户端js?

时间:2013-11-21 07:05:37

标签: javascript browser

情况如下:

我得到一个js来监控网络广告。因为浏览器缓存,当我在服务器端更新js时,客户端的js不会立即刷新。如果我更新js,我怎么能强制刷新客户端js服务器端?

P.S。在我的情况下,添加版本号策略是没用的。

3 个答案:

答案 0 :(得分:6)

简单策略 - 将版本号作为查询字符串添加到js文件中,并更改数字。这将导致浏览器再次获取您的js文件 -

<script src="mysource.js?version=123"></script>

每当您更改服务器上的脚本时,也请在html中更改此版本号。或者更好的是,每次请求此脚本时,都应用随机数作为version值。

答案 1 :(得分:1)

您可以通过更改文件名来执行此操作。添加一些版本号(可能像参数,例如PHP的filename.js?v=time();)或只是在文件名的末尾添加一些随机数。

实际上我不确定你是否可以强制客户端刷新这种类型的文件。但是在更改文件名时,您将强制浏览器获取最新版本。

答案 2 :(得分:0)

您可以使用HTTP的cache-control mechanisms来控制浏览器的缓存。

在提供JS文件的副本时,请在响应中包含ETag和/或Last-Modified标头。还包括“Cache-Control:必须重新生效”标头。这告诉浏览器每次都必须与服务器进行检查,并且它可以在将来的请求中发送If-None-Match和/或If-Modified-Since标头,要求服务器仅在文件发生更改时才发送文件。

如果您希望每次都避免加载浏览器检查服务器,并且可以立即生效,那么您还可以在当前时间包含Date标头,并且Expires标题设置在未来的某个点 - 可能是12或24小时。这样,浏览器就可以在指定的时间内使用缓存副本,然后再次检查服务器。

HTTP的缓存控制功能相当强大,但有很多细微差别,例如中间缓存的控件(例如服务器和用户浏览器之间的其他系统)。您需要全面了解caching in HTTP,而不仅仅是我提到的特定标题字段。