本文總結了如何為使用IIS托管的網站啟用Gzip壓縮, 進而減少網頁網絡傳輸大小, 提高使用者顯示頁面的速度.
本文的知識點是從網際網路收集整理, 主要來源于中文wiki. 使用YSlow檢測網站啟用了哪些優化時, Gzip是十分關鍵的一項. 啟動Gip壓縮将立竿見影的減少頁面的網絡傳輸大小.
HTTP壓縮是在Web伺服器和浏覽器間傳輸壓縮文本内容的方法。HTTP壓縮采用通用的壓縮算法如gzip等壓縮HTML、JavaScript或CSS檔案。壓縮的最大好處就是降低了網絡傳輸的資料量,進而提高用戶端浏覽器的通路速度。當然,同時也會增加一點點伺服器的負擔。Gzip是比較常見的一種HTTP壓縮算法。
Web伺服器處理HTTP壓縮的工作原理如下:
1.Web伺服器接收到浏覽器的HTTP請求後,檢查浏覽器是否支援HTTP壓縮;
在使用者浏覽器發送請求的HTTP頭中, 帶有"Accept-Encoding: gzip, deflate"參數則表明支援gzip和deflate兩種壓縮算法.
2.如果浏覽器支援HTTP壓縮,Web伺服器檢查請求檔案的字尾名;
靜态檔案和動态檔案字尾啟動要所都需要在MetaBase.xml中設定.
靜态檔案需要設定: HcFileExtensions Metabase Property (單擊跳轉到MSDN說明)
動态檔案需要設定: HcScriptFileExtensions Metabase Property (單擊跳轉到MSDN說明)
3.如果請求檔案是HTML、CSS等靜态檔案并且檔案字尾啟用了壓縮,則Web伺服器到壓縮緩沖目錄中檢查是否已經存在請求檔案的最新壓縮檔案;
4.如果請求檔案的壓縮檔案不存在,Web伺服器向浏覽器傳回未壓縮的請求檔案,并在壓縮緩沖目錄中存放請求檔案的壓縮檔案;
5.如果請求檔案的最新壓縮檔案已經存在,則直接傳回請求檔案的壓縮檔案;
6.如果請求檔案是ASPX等動态檔案并且檔案字尾啟用了壓縮,Web伺服器動态壓縮内容并傳回浏覽器,壓縮内容不存放到壓縮緩存目錄中。
IIS預設并不支援HTTP壓縮,需要進行簡單的配置
1.打開Internet資訊服務(IIS)管理器,右擊"網站"->"屬性",選擇"服務"。在"HTTP壓縮"框中選中"壓縮應用程式檔案"和"壓縮靜态檔案",按需要設定"臨時目錄"和"臨時目錄的最大限制";
2.提醒: 經試驗此步驟在本人機器上沒有作用, 可以忽略.
在Internet資訊服務(IIS)管理器,右擊"Web服務擴充"->"增加一個新的Web服務擴充...",在"建立Web服務擴充"框中輸入擴充名"HTTP Compression",添加"要求的檔案"為C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系統目錄根據您的安裝可能有所不同,選中"設定擴充狀态為允許";
3.使用文本編輯器打開C:\Windows\System32\inetsrv\MetaBase.xml(建議先備份),
找到Location ="/LM/W3SVC/Filters/Compression/gzip用于設定gzip壓縮,
找到Location ="/LM/W3SVC/Filters/Compression/deflate"用于設定deflate壓縮.
上面兩個節點緊挨着.并且設定的屬性相同.
如果需要壓縮動态檔案,則将HcDoDynamicCompression設定為"TRUE",并在HcScriptFileExtensions中增加您要壓縮的動态檔案字尾名,如aspx;如果需要壓縮靜态檔案,則将HcDoStaticCompression和HcDoOnDemandCompression設定為"TRUE",并在HcFileExtensions中增加您需要壓縮的靜态檔案字尾名,如xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的壓縮率,數值在0-10, 預設為0.
HcDynamicCompressionLevel屬性說明:HcDynamicCompressionLevel Metabase Property
HcOnDemandCompLevel 屬性說明:HcOnDemandCompLevel Metabase Property
說明: 這兩個屬性值一般推薦設定為9, 具有最佳成本效益.但是在我的window server 2003上, 壓縮率無論如何設定, jQuery和jQuery UI兩個檔案(58k/188k)壓縮後的大小一直相同.(20k/45k).
下面是我的執行個體:
4.編輯完畢後儲存MetaBase.xml檔案;如果檔案無法儲存,則可能IIS正在使用該檔案。打開"開始"->"管理工具"->"服務",停止"IIS Admin Service"後,即可儲存;
5.最後,重新啟動IIS。可以到HTTP壓縮測試網站驗證結果.以jQuery為例, 核心類庫和UI類庫原始大小分别是57k和188k,壓縮後分别是20k和45k:
我們通過Http頭中的: Content-Encoding:gzip 屬性判斷傳回後的資料已經啟用了gzip壓縮:
使用YSlow檢測, 當隻啟動靜态檔案壓縮時, Gzip壓縮評級為B:
當同時啟動了動态檔案壓縮時, Gzip壓縮評級為A:
1. 在修改MetaBase.xml檔案時, 要停止"IIS Admin Service"服務. 否則無法儲存.
2.靜态壓縮和動态壓縮率最好設定為9.
3.上文的步驟2, 即使不添加Web服務擴充效果也是相同的.
4.壓縮率設定對js檔案不起作用, 壓縮後大小總是相同的.
5.圖檔檔案即使啟用了gzip壓縮大小也沒有變化.
本文總結了如何在IIS中啟用Gzip壓縮. 在半年前的項目中我為網站啟用了Gzip, 今天整理此文主要為了整理自己的知識以便以後忘記時複習. 另外經檢視ChinaCache公司提供的CDN也都啟用了Gzip壓縮.