IIS7配置Gzip壓縮
IIS7配置Gzip壓縮
本文來自Kevin Yang部落格 作者:Kevin Yang
開啟配置HTTP壓縮(GZip)
在IIS7中配置Gzip壓縮相比IIS6來說實在容易了許多,而且預設情況下就是啟用GZip壓縮的。如果沒有,則可以再功能檢視下找到“壓縮”項,進入之後就會看到“靜態內容壓縮”和“動態內容壓縮”兩個選項,勾上即可。
配置啟用壓縮的檔案型別及其他選項
當開啟GZip壓縮之後,IIS並不是對所有內容都啟用了壓縮,而是有選擇的進行壓縮。遺憾的是,我們無法直接在IIS7管理器中配置這些壓縮選項。我們首先需要在C:\Windows\System32\inetsrv\config資料夾下找到applicationhost.config檔案,開啟之後找到如下一節內
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> <dynamicTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" />
我們可以看到,IIS實際上是根據MIME型別來決定是否啟用HTTP壓縮的,以及壓縮比之類的選項。可以看出,圖片預設情況下是不被壓縮的,這是因為圖片的壓縮比太低了。
我們注意到,對於Javascript來說,上面對不同的mime型別配置了不同的壓縮方式。Javascript有三種常見的Mime型別,text/javascript,application/x-javascript,application/javascript。這三種類型都是合法的,在現代瀏覽器中也不存在什麼差別。但是由於IIS7中Js檔案的mime型別預設被設定為application/x-javascript,也就是說對於js檔案,使用的是動態內容壓縮而不是靜態內容壓縮,因此會導致js檔案有時經過壓縮的,有時卻沒有壓縮。
由於js檔案通常穩定之後不會再被修改了,因此建議改成靜態壓縮——即把dynamicTypes這一節中的application/x-javascript挪到靜態壓縮節中。這樣保證每次指令碼都是被壓縮過返回的。
靜態壓縮及動態壓縮的區別
IIS7中的HTTP壓縮分為“靜態內容壓縮”和“動態內容壓縮”,其實這兩個名字第一次接觸很費解。什麼是動態內容什麼又是靜態內容?實際上,準確的翻譯應該是“靜態壓縮”和“動態壓縮”。這兩個詞反應了IIS的壓縮行為。對於配置在staticTypes節中的mime型別,將會啟用靜態壓縮,也就是說,當檔案第一次被請求的時候,IIS會將其壓縮,然後放入臨時資料夾中,下次再有人請求此檔案時直接從臨時資料夾中取出壓縮後的版本而不用重新執行壓縮的過程。配置在dynamicTypes一節中的mime型別的http請求都將啟用動態壓縮,即每一次請求,主機都會對請求的內容——可能是存放在檔案系統中的靜態檔案,也可能是ISAPI返回的內容——進行壓縮,而不會對其進行快取。這個壓縮比率因主機效能不同而會有所調整,所以我們在請求js檔案的時候才會發現js檔案有時壓縮有時不壓縮的情況。
顯而易見,靜態壓縮會佔用一定的儲存空間,但是速度快,而動態壓縮不佔用儲存空間,但是佔用CPU時間,而且壓縮比不恆定。而對於經過ISAPI的請求,則不能使用靜態壓縮方式。例如對於WCF返回的內容。