幾年前寫的一個系列,現重新發佈於此。
一、HTTP壓縮概述
HTTP壓縮主要是通過一種叫做GZip的壓縮方式(壓縮率通常在30%-50%)將使用者請求的檔案壓縮後再返回給使用者,使用者接收到壓縮後的檔案後在瀏覽器中解壓還原。目前IIS中內建的有這種壓縮方式,大多數瀏覽器(如IE,Firefox)中包含解壓程式,所以實現起來非常簡單。
二、HTTP壓縮的工作原理
Web伺服器接收到瀏覽器的HTTP請求後,檢查瀏覽器是否支援HTTP壓縮;
如果瀏覽器支援HTTP壓縮,Web伺服器檢查請求檔案的尾碼名;
如果請求檔案是HTML、CSS等靜態檔案,Web伺服器到壓縮緩衝目錄中檢查是否已經存在請求檔案的最新壓縮檔;
如果請求檔案的壓縮檔不存在,Web伺服器向瀏覽器返回未壓縮的請求檔案,並在壓縮緩衝目錄中存放請求檔案的壓縮檔;
如果請求檔案的最新壓縮檔已經存在,則直接返回請求檔案的壓縮檔;
如果請求檔案是ASPX等動態檔案,Web伺服器動態壓縮內容並返回瀏覽器,壓縮內容不存放到壓縮緩衝目錄中。
三、在IIS6.0中配置Http壓縮
開啟Internet資訊服務(IIS)管理器,右擊"網站"->"屬性",選擇"服務"。選中"壓縮應用程式檔案"和"壓縮靜態檔案",按需要設定"臨時目錄"和"臨時目錄的最大限制";
在Internet資訊服務(IIS)管理器,在"Web服務擴充"中增加一個新的Web服務擴充,其中"要求的檔案"為"C:\WINDOWS\system32\inetsrv\gzip.dll";
修改"C:\Windows\System32\inetsrv\MetaBase.xml"(這是IIS的核心設定檔,如果損壞將導致IIS無法工作,建議先備份)。找到Location ="/LM/W3SVC/Filters/Compression/gzip",如果需要壓縮動態檔案,則將HcDoDynamicCompression設定為"TRUE",並在HcScriptFileExtensions中增加您要壓縮的動態檔案尾碼名,如aspx;如果需要壓縮靜態檔案,則將HcDoStaticCompression和HcDoOnDemandCompression設定為"TRUE",並在HcFileExtensions中增加您需要壓縮的靜態檔案尾碼名,如xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的壓縮率,數字越小壓縮率越低,消耗的CPU記憶體資源也越少。網上有人推薦設定為9取得最好的平衡,但我沒有測試過;
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="1"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcDynamicCompressionLevel="9"
HcFileExtensions="htm
html
txt
css
js
xml
HcOnDemandCompLevel="9"
HcPriority="1"
HcScriptFileExtensions="asp
dll
exe
aspx"
>
編輯完畢後儲存MetaBase.xml檔案;如果檔案無法儲存,則可能IIS正在使用該檔案。開啟"開始"->"管理工具"->"服務",停止"IIS Admin Service"後,即可儲存,儲存後再啟動此服務;
最後重新啟動IIS;
四、測試壓縮效果
我們可以看到檔案被壓縮了50%,效果還是相當明顯的。
五、總結
目前,很多大型的網站都啟用了HTTP壓縮功能,如MSDN、CNBlog等。當然,啟用壓縮功能會增加Web伺服器CPU、記憶體的負擔(壓縮是要消耗資源的),但從成本角度考慮增加一個CPU比增加10M的頻寬要便宜得多,所以對於Web應用的意義是非常巨大的。
參考文檔:
http://doc.51windows.net/iismmc/?url=/iismmc/htm/qos_utilbandwdth.htm