Javascript 如何确保浏览器在更新后加载文件的最新版本?

Javascript 如何确保浏览器在更新后加载文件的最新版本?,javascript,html,apache,nginx,Javascript,Html,Apache,Nginx,在推出新的网站更改或web应用程序更改时,有时浏览器会在您导航到该网站时加载旧的javascript或图像文件。通常需要手动刷新页面,浏览器才能加载新更新的文件 如何确保更新后,用户在第一次加载页面时收到最新的文件,而不必手动刷新以清除任何缓存文件。有没有一种非常可靠的方法可以通过发送expires标头或last modified来实现这一点?检查每个系统的可用数据。我在一些项目中使用了哈希。该散列(md5或一些快速的东西)是从使用较少的/SASS文件或JS模块的文件内容计算出来的。每次更改某些

在推出新的网站更改或web应用程序更改时,有时浏览器会在您导航到该网站时加载旧的javascript或图像文件。通常需要手动刷新页面,浏览器才能加载新更新的文件


如何确保更新后,用户在第一次加载页面时收到最新的文件,而不必手动刷新以清除任何缓存文件。有没有一种非常可靠的方法可以通过发送expires标头或last modified来实现这一点?

检查每个系统的可用数据。

我在一些项目中使用了哈希。该散列(md5或一些快速的东西)是从使用较少的/SASS文件或JS模块的文件内容计算出来的。每次更改某些内容时,例如在LESS源中,编译的CSS文件将有一个新的文件名


您应该启用具有较长缓存时间的客户端缓存。浏览器将本地存储CSS文件。它仅在实时部署后加载新的CSS文件。

我假设您有一个构建脚本或一组任务脚本来帮助您完成更新网站/应用程序的重复过程。既然您用javascript标记了您的问题,我将为您提供一个基于javascript的解决方案

您可以使用(或始终使用)像或这样的任务运行程序,然后运行缓存破坏,以从以下内容更新您的url:

<script src="testing.js"></src>
<link href="testing.css" rel="stylesheet">
<img src="testing.png">

为此:

<script src="testing.js?v=123456"></src>
<link href="testing.css?v=123456" rel="stylesheet">
<img src="testing.png?v=123456">


这将阻止浏览器重用您的资源。

我只知道一种方法——在文件URL的末尾添加一些参数。 例如,你有image picture.png,而不是像这样用html编写

<img src="path/to/picture.png">

你必须这样写:

<img src="path/to/picture.png?specific_parameter_123">

因此,在“?”之后更改此参数将强制浏览器再次加载您的图片(或其他内容),因为浏览器的确切路径已更改

您可以通过手动更改参数(甚至每次由JS随机生成)或使用and之类的方法来实现,它将基于md5哈希生成文件的唯一URL。所以,一旦文件被更改,url也将被更改

也可以在服务器端执行同样的操作。例如,如果您正在使用PHP,您可以尝试以下方法:


有关查询字符串的详细信息。

在url中添加一个带有时间戳的查询字符串。@adeneo,不。这会阻止缓存资源。同意@Madbreaks。为什么不在查询字符串中附加一个git(或static,如果必须的话)版本号,这样每个版本都会被访问者的浏览器缓存,但在您部署一组新的更改时会更新。@Madbreaks然后投票关闭它,并引用此处的另一个问题