当网站内容在AngularJS网站发生变化时,如何使index.html不缓存?

k2fxgqgv  于 2022-09-18  发布在  Java
关注(0)|答案(4)|浏览(210)

通常对于.js.css文件,我们会在构建过程中添加一个类似xx.js?v=123的版本,然后在网站部署后,我们可以得到新版本的js和css。但我没有看到一个地方讨论如何在网站部署时进行index.html文件升级。我们确实在IE中看到,HTML内容应该已经更改,但它仍然使用旧的HTML内容。

我从谷歌找到的一个解决方案是

<meta http-equiv="Cache-control" content="no-cache">

然而,我不确定这是否是最好的解决方案?

clj7thdc

clj7thdc1#

是的,这是正确的方式。您必须设置Cache-Control头,让浏览器知道他们不必为该请求缓存任何内容。

<meta http-equiv="Cache-control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">

(PragmaCache-Control是同一件事,但来自不同的HTTP规范。请在此处查看答案:Difference between Pragma and Cache-control headers?)

请参阅此处的相关答案之一:如何拆分yeoman index.html缓存

ffdz8vbo

ffdz8vbo2#

正如评论中提到的,这实际上是您想要查看的服务器配置,但您没有提到您的设置。我们使用IIS在.NET后端运行AngularJS站点。

我们定期更新我们的网站,过去在JS和CSS资源缓存方面遇到过问题,但我们通过以下设置解决了这个问题:

构建

我们使用GULP来构建AngularJS应用程序,并且作为其中的一部分,我们将版本号附加到我们的主应用程序的频繁更改的CSS和Java脚本文件的查询字符串中。例如:

<link href="css/default.min.css?v=2" rel="stylesheet" />

服务器配置

在根web.config中,我们通过将cache-controlPragmaExpires请求头以及max-age设置为0来指定不希望缓存index.html。

<location path="index.html">
<system.webServer>
  <staticContent>
    <clientCache cacheControlMode="DisableCache" cacheControlMaxAge="0.00:00:00" />
  </staticContent>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
            <add name="Pragma" value="no-cache" />
            <add name="Expires" value="-1" />
        </customHeaders>
    </httpProtocol>  
</system.webServer>
</location>

参考资料:

yduiuuwa

yduiuuwa3#

通过将content值设置为0,浏览器将始终从Web服务器加载页面。

<meta http-equiv="expires" content="0">
ezykj2lf

ezykj2lf4#

您可以从特定站点的高级设置中指定不启用预加载。然而,您的站点性能将受到影响。还要检查特定网站的应用程序池是否在和.NET CLR版本上集成了管道模式。

相关问题