我有一个单页面应用程序(angular-js),它通过IIS提供。如何防止HTML文件的缓存?需要通过更改index.html或web.config中的内容来实现解决方案,因为无法通过管理控制台访问IIS。
我目前正在调查的一些选项是:
IIS是带有.NET framework 4的7.5版
将以下内容添加到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
。
对于.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");
}
}
});
在提供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>
<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0">
将以下内容添加到web.config解决方案中可以在Chrome,IE,Firefox和Safari中使用:
这将确保在请求index.html时将Cache-Control标头设置为no-cache。