我有一个通过IIS提供服务的单页应用程序(angular-js)。如何防止缓存HTML文件?该解决方案需要通过更改index.html或web.config中的内容来实现,因为通过管理控制台访问IIS是不可能的。
我目前正在研究的一些选择是:
- web.config缓存配置文件-http://www.iis.net/configreference/system.webserver/caching
- 配置客户端缓存-http://www.iis.net/configreference/system.webserver/staticcontent/clientcache
- metatags -在所有浏览器中使用标签关闭缓存?
IIS版本为7.5,带有.NET Framework 4
7条答案
按热度按时间1mrurvl11#
将以下内容添加到
web.config
解决方案中,可以在Chrome、IE、Firefox和Safari上运行:这将确保在请求
index.html
时将Cache-Control
报头设置为no-cache
。csga3l582#
对于.NET Core,我使用了以下代码。
如何在ASP.NET核心rc2中禁用浏览器缓存?
tvmytwxo3#
SPA的主要前提是***不缓存index.html***
按照MDN建议防止缓存,我们必须将***Cache-Control***HTTP头与***no-store,max-age=0***值添加到资源(本例中为 * index.html * 文件)。
*为什么 * 不存储 * 而不是 * 不缓存 ?
当 no-store 时,资源不会被存储在任何地方。使用 no-cache,资源可以被存储,但是在使用它之前,它应该由存储与服务器进行验证。
为什么 max-age=0?
强制清除预先存在的有效缓存响应(no-store 不)。
在IIS中,我们可以通过 web.config 文件管理应用缓存配置。下面是一个完整的 web.config 文件(必须位于我们应用程序的根目录下),其中包括 * index.html * 文件该高速缓存配置以及路由配置(我添加了SPA路由和HTTP重定向到HTTPS作为示例):
qacovj5a4#
当你的html文件,你可以附加一个随机的查询字符串。这将防止浏览器使用旧版本,即使文件在浏览器缓存中。
另一个选项是在IIS级别添加无缓存设置。这将添加Cache-Control:响应中的no-cache,告诉浏览器不要缓存文件。它从IIS 7开始工作。
70gysomp5#
gojuced76#
这些答案对我都不起作用,因为正如@MichailMichailidis提到的,“* SPA中的所有请求都有虚拟URL,并且不Map到真实的位置路径 *”,所以
location path
永远不会匹配index.html
。我在这个blog post中找到了解决方案,它链接到这个答案。这两篇文章都向您展示了如何使用rewrite模块的
outboundRules
根据条件更改cache-control
响应头。这就是我的web.config在配置后的样子:
qacovj5a7#
对于我的情况,以前的答案都不起作用,但我找到了另一种方法,通过过滤响应内容类型。
只需在web.config中添加以下内容