如何禁止IIS緩存靜態(tài)文件(png、js、html)
禁止IIS緩存靜態文件(png、js、html等)背(bèi)景:
IIS為了提高性能,默認情況下會對靜(jìng)態文件js、html、gif、png等做內部緩(huǎn)存,這個(gè)緩存是在服務器iis進程的內存中的。IIS這麽做在很大程度上可以提高靜態文件(jiàn)的訪問性能,在正常情況下隻要靜態文件更新了IIS也會更新(xīn)緩存。但是如果更新的靜態文(wén)件很(hěn)多就有可能出現緩存不更(gèng)新的情況。
彎路:
我遇到這樣一個場景,服務(wù)器循環更新上萬張股票行情圖片,IIS也會對圖片進行緩存,由於更新的頻率很高,文件很多,就出現了IIS緩存文(wén)件超(chāo)過幾(jǐ)十分鍾都無法更(gèng)新的情況。
這時候直覺是瀏(liú)覽器對文件進行了(le)緩存,於是就在(zài)IIS的目錄上設置Http頭:Cache-Control:no-cache,但是無濟於事,瀏覽器請求服務器端得到的狀態號是200,這可以說明瀏覽器確實是(shì)從服務器端(duān)得到了(le)新的內容,而非讀取瀏覽器(qì)本地緩存。
如何禁止IIS緩存靜態文件(png、js、html等):
通過設置Http頭不讓瀏覽器緩存的(de)方法在這個場景下是行不通的,因(yīn)為緩存不(bú)是出現的(de)客戶端,而是出現(xiàn)在IIS服務器上;所以解決問題還需要從IIS本身入手,通(tōng)過配置Metabase.xml文件禁止IIS緩存相應目錄下的靜態文件。
1. 首先需要設置IIS允許(xǔ)運行時編輯(jí)Metabase.xml文件
打開IIS,然後打開IIS屬性頁,勾選上“允許直接編輯配置數(shù)據庫”選項(xiàng)
2. 在運行中輸入notepad c:\WINDOWS\system32\inetsrv\MetaBase.xml 打開IIS配置(zhì)文件
3. 在文件(jiàn)中搜索要配置禁(jìn)止緩存(cún)的虛擬目錄名(míng)字,找到類似如(rú)下配置(zhì)節
<IIsWebVirtualDir locations ="/LM/W3SVC/1832041641/root/inc"
AccessFlags="AccessRead AccessScript"
AppFriendlyName="inc"
AppIsolated="2"
AppRoot="/LM/W3SVC/1832041641/Root/inc"
DirBrowseFlags="DirBrowseShowDate DirBrowseShowTime DirBrowseShowSize DirBrowseShowExtension DirBrowseShowLongDate EnableDefaultDoc"
Path="D:\publish\inc"
>
</IIsWebVirtualDir>
在IIsWebVirtualDir配置節中添加 MD_VR_NO_CACHE=”1“ 屬性
4. 保存配置(zhì)文件,重啟IIS即可。
如果想配置服務器上的所有站點都禁用IIS緩存可以通過修改注冊表(biǎo)實現:
編輯注冊表中的(de) DisableStaticFileCache值,0為啟用,1為禁用 ,該(gāi)鍵值的位置位於:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
如果該鍵不存在(zài)可以新建。
注意事項:
通常情況下我們並不需要禁用IIS的靜態文件緩存,iis會自動根據(jù)靜態文件的修改時間自動(dòng)更新緩存(cún);隻有在你遇(yù)到非常情況下才有必要禁用IIS緩存。IIS緩存和Http緩存相(xiàng)關頭沒有任何關係(xì),在IIS上加緩存頭沒有辦法(fǎ)清除掉IIS對靜態文件的緩存。
關鍵詞:IIS,png,js,html
閱讀本文後您有什麽感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 0
- 0