禁止IIS缓存静态文件(png、js、html等)的方法
禁止iis缓存静态文件(png、js、html等)背景:
iis为了提高性能,默认情况下会对静态文件js、html、gif、png等做内部缓存,这个缓存是在服务器iis进程的内存中的。iis这么做在很大程度上可以提高静态文件的访问性能,在正常情况下只要静态文件更新了iis也会更新缓存。但是如果更新的静态文件很多就有可能出现缓存不更新的情况。
弯路:
我遇到这样一个场景,服务器循环更新上万张股票行情图片,iis也会对图片进行缓存,由于更新的频率很高,文件很多,就出现了iis缓存文件超过几十分钟都无法更新的情况。
这时候直觉是浏览器对文件进行了缓存,于是就在iis的目录上设置http头:cache-control:no-cache,但是无济于事,浏览器请求服务器端得到的状态号是200,这可以说明浏览器确实是从服务器端得到了新的内容,而非读取浏览器本地缓存。
如何禁止iis缓存静态文件(png、js、html等):
通过设置http头不让浏览器缓存的方法在这个场景下是行不通的,因为缓存不是出现的客户端,而是出现在iis服务器上;所以解决问题还需要从iis本身入手,通过配置metabase.xml文件禁止iis缓存相应目录下的静态文件。
1. 首先需要设置iis允许运行时编辑metabase.xml文件
打开iis,然后打开iis属性页,勾选上“允许直接编辑配置数据库”选项
2. 在运行中输入notepad c:\windows\system32\inetsrv\metabase.xml 打开iis配置文件
3. 在文件中搜索要配置禁止缓存的虚拟目录名字,找到类似如下配置节
<iiswebvirtualdir location ="/lm/w3svc/1832041641/root/inc" |
在iiswebvirtualdir配置节中添加 md_vr_no_cache=”1“ 属性
4. 保存配置文件,重启iis即可。
如果想配置服务器上的所有站点都禁用iis缓存可以通过修改注册表实现:
编辑注册表中的 disablestaticfilecache值,0为启用,1为禁用 ,该键值的位置位于:hkey_local_machine\system\currentcontrolset\services\inetinfo\parameters
如果该键不存在可以新建。
注意事项:
通常情况下我们并不需要禁用iis的静态文件缓存,iis会自动根据静态文件的修改时间自动更新缓存;只有在你遇到非常情况下才有必要禁用iis缓存。iis缓存和http缓存相关头没有任何关系,在iis上加缓存头没有办法清除掉iis对静态文件的缓存。