将web标记为过时,以强制浏览器重新加载其内容

Mark the web as obsolete to force browsers reload its content

本文关键字:新加载 加载 浏览器 记为 web 过时      更新时间:2023-09-26

我在一个内置于angular的仪表板中工作,该仪表板攻击用java实现的后端。

我以前从未使用过angularjs。

当在前端实现并部署新功能时,人们需要在mac中"硬刷新",对于Chrome,Cmd+Shift+R,才能看到新功能。

到目前为止,我在index.html 的元中添加了这个

<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
<meta http-equiv="CACHE-CONTROL" content="NO-STORE">

但它不起作用。

你知道angular是否有一些指令,一些版本控制,我可以用来告诉浏览器,是时候重新加载内容了吗?

谢谢!!!

我用来确保浏览器获取资源更新副本的最直接的方法是向URL附加一个唯一的querystring值。当需要通知浏览器重新提取时,只需更改querystring值即可。

根据您的服务器技术(我对JSP不是很熟悉),这种语法会略有不同,但在ASP.NET中,它看起来像:

<script type="text/javascript" src="myfile.js?v=<%= Conf.StaticKey %>"></script>

在你的代码中,你可以指向你的应用程序配置,并从中提取一个密钥,然后在需要新版本时在配置中更改该密钥:

public static class Conf {
    public static string StaticKey { 
        get { return ConfigurationManager.AppSettings["staticKey"]; }
    }
}
<appSettings>
    <add key="staticKey" value="B0DFAB04-33DC-40E7-9E9F-6619CA6441EA" />
</appSettings>

当config值更改时,呈现的HTML将显示不同的查询字符串,因此浏览器将重新提取javascript文件。实际的查询字符串值将被忽略。

为了避免资源缓存(如JS或CSS文件),您可以将angular应用程序的版本号添加到它们的url 中

http://example.com/v1.2.3/js/myjsfile.js

这样,一旦你的应用程序的新版本发布,url就会更改,浏览器就会再次下载该文件。

为了进行开发,请考虑为此类url添加时间戳,而不是版本号

http://example.com/dev/js/myjsfile.js?123124325435

如果您想避免缓存HTML文件,请考虑不向客户端发送缓存标头

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0

在这里,你可以找到一篇关于它的完整文章(如何在所有浏览器中控制网页缓存?)

请注意,在生产时禁用缓存可能会使服务器过载。