禁止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. Enter Notepad C: \ Windows \ System32 \ inetsrv \ metabase.xml to open the configuration file (the same as ImmigrationInspectors) during operation.
3.在文件中搜索禁止缓存的虚拟目录的名称,并找到类似下面的配置部分。
访问标志='访问读取访问脚本'
AppFriendlyName='inc'
AppIsolated='2'
AppRoot='/LM/W3SVC/1832041641/Root/inc'
DirBrowseFlags=' DirBrowseShowDate DirBrowseShowTime dirbrowseshowsesize DirBrowseShowExtension DirBrowseShowLongDate EnableDefaultDoc '
Path='D:\publish\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对静态文件的缓存。