如何禁用通过IIS提供的单页面应用程序HTML文件的缓存?

问题描述 投票:25回答:5

我有一个单页面应用程序(angular-js),它通过IIS提供。如何防止HTML文件的缓存?需要通过更改index.html或web.config中的内容来实现解决方案,因为无法通过管理控制台访问IIS。

我目前正在调查的一些选项是:

IIS是带有.NET framework 4的7.5版

asp.net angularjs caching iis single-page-application
5个回答
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


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");
                }
            }
        });

感谢How to disable browser cache in ASP.NET core rc2?


6
投票

在提供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>

4
投票
  <meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0">


1
投票

将以下内容添加到web.config解决方案中可以在Chrome,IE,Firefox和Safari中使用:

这将确保在请求index.html时将Cache-Control标头设置为no-cache。

© www.soinside.com 2019 - 2024. All rights reserved.