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

Javascript 如何从服务器端强制刷新客户端js?,javascript,browser,Javascript,Browser,情况如下: 我有一个js来监控网络广告。由于浏览器缓存,当我在服务器端更新js时,客户端的js不会立即刷新。我如何在服务器端更新js后强制刷新客户端js p、 添加版本号策略在我的案例中没有用处。简单策略-将版本号作为查询字符串添加到js文件中,然后更改版本号。这将导致浏览器再次获取您的js文件- <script src="mysource.js?version=123"></script> 每当您在服务器上更改脚本时,也要在html中更改此版本号。或者更好的方法是

情况如下:

我有一个js来监控网络广告。由于浏览器缓存,当我在服务器端更新js时,客户端的js不会立即刷新。我如何在服务器端更新js后强制刷新客户端js


p、 添加版本号策略在我的案例中没有用处。

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

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


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

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

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

您可以使用HTTP控制浏览器的缓存

提供JS文件副本时,在响应中包含和/或头。还包括“:必须重新验证”标题。这告诉浏览器,它每次都必须与服务器进行核对,并且它可以在将来的请求中发送and/or头,以要求服务器仅在文件发生更改时发送该文件

如果您希望避免每次都要检查服务器的浏览器负载,并且更改不会立即生效,那么您还可以包含一个当前时间的标题和一个设置为将来某个时间点(可能是12或24小时)的标题。这允许浏览器在重新检查服务器之前,在指定的时间内使用其缓存副本


HTTP的缓存控制功能非常强大,但有很多细微差别,例如中间缓存的控制(例如,服务器和用户浏览器之间的其他系统)。你会想了解整体情况,而不仅仅是我提到的特定标题字段。

这种策略不能用于我的情况。我的js被不同的项目使用,这种策略意味着一旦我更新我的js,一群人就必须更新他们的代码,这太贵了。无论如何谢谢。@Allerson:可能不会。其他使用你脚本的人可以附加一个随机数作为版本值。这样,每次请求脚本时,都会请求一个新值(如果随机数非常大,则生成两次随机数的几率非常低)。这样他们就不必手动执行任何操作。这就是一些JavaScript框架(即Sencha Touch)加载JS组件的方式。一个新问题:因为我们附加了一个随机数作为版本值,这意味着JS无法缓存,我们的服务器将收到更多请求。这个JS每天将被请求2000多万次,而我们只有3台服务器。这样,压力会很大。很棒的黑客,它救了我一天-谢谢:)