我有一个单页面应用程序(angular-js),它通过IIS提供。如何防止HTML文件的缓存?需要通过更改index.html或web.config中的内容来实现解决方案,因为无法通过管理控制台访问IIS。
我目前正在调查的一些选项是:
IIS是带有.NET framework 4的7.5版
答案 0 :(得分:35)
将以下内容添加到web.config解决方案中,适用于Chrome,IE,Firefox和Safari:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<location path="index.html">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
</configuration>
这将确保在请求Cache-Control
时no-cache
标头设置为index.html
。
答案 1 :(得分:11)
对于.NET Core,我使用了以下内容。
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
if (context.File.Name == "index.html" ) {
context.Context.Response.Headers.Add("Cache-Control", "no-cache, no-store");
context.Context.Response.Headers.Add("Expires", "-1");
}
}
});
答案 2 :(得分:5)
提供html文件时,可以附加随机查询字符串。即使文件位于浏览器缓存中,这也会阻止浏览器使用旧版本。
/index.html?rnd=timestamp
另一个选项是在IIS级别添加no-cache设置。这会在响应中添加Cache-Control:no-cache,告诉浏览器不缓存文件。它从IIS 7开始运行。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Note the use of the 'location' tag to specify which
folder this applies to-->
<location path="index.html">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</location>
</configuration>
答案 3 :(得分:3)
<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0">
答案 4 :(得分:1)
将以下内容添加到可在Chrome,IE,Firefox和Safari中运行的web.config解决方案中:
这将确保在请求index.html时,将Cache-Control标头设置为no-cache。
答案 5 :(得分:0)
在 MDN recommendations to prevent caching 之后,我们必须添加 Cache-Control HTTP 标头和 no-store, max-age= 0 资源的值(在我们的例子中是 index.html 文件)。
为什么no-store而不是no-cache?
no-store,资源不会存储任何地方。使用no-cache,可以存储资源,但在使用之前应该由存储与服务器验证。
为什么 max-age=0?
强制清除预先存在的有效缓存响应(no-store 不会)。
在 IIS 中,我们可以通过 web.config 文件管理我们的应用缓存配置。这是一个完整的 web.config 文件(必须位于我们应用程序的根目录中),其中包括 index.html 文件的缓存配置以及路由配置(我已经添加了 SPA 路由和 HTTP 重定向到 HTTPS 作为示例):
<configuration>
<location path="index.html">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-store, max-age=0" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" />
</rule>
<rule name="SPA Routes" enabled="true" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>