配置 Microsoft Internet Information Server 6.0 的 HTTP 壓縮
HTTP 壓縮的好處:
靜態網頁採用HTTP 壓縮,大約可以減少20%的傳輸量。
使用者端使用IE 5.0瀏覽器連線到已經啟用HTTP壓縮IIS 5.0之Web伺服器,才有HTTP壓縮功能。如今,絕大多數的現代瀏覽器支援壓縮技術,但是,具體的壓縮方式取決於瀏覽器。不過你無需對此擔心,因為只有瀏覽器指示支援一種壓縮方式時,Web伺服器才會發送壓縮內容。儘管如此,瞭解一下這種處理機制和不同瀏覽器支援的壓縮類型也是一件有意義的事。
瀏覽器在要求一個網址時,會把支援的壓縮格式通過Accept-Encoding的HTTP頭提交給伺服器,IIS或其它Web伺服器則從HTTP_ACCEPT_ENCODING環境變數讀取這個資訊,這個過程無需你人為幹預,IIS在瀏覽器支援壓縮的情況下會自動對發送的內容進行合適的編碼。
下表列出了常見的瀏覽器和它們支援的編碼類別型:
瀏覽器 |
支援的編碼 |
Firefox 1.0, Mozilla 1.x, Camino |
gzip, deflate |
OmniWeb 5.x |
bzip2, gzip, deflate |
Safari |
gzip, deflate |
Internet Explorer |
gzip, deflate |
使用 HTTP 壓縮:
如果您的網站使用了很大的頻寬,或者您希望更加有效地使用頻寬,請考慮啟用 HTTP 壓縮。HTTP 壓縮在啟用壓縮的瀏覽器和 IIS 之間提供了更短的傳輸時間。既可以只壓縮靜態檔案,又可以同時壓縮靜態檔案和應用程式響應。如果網路頻寬受到限制,使用 HTTP 壓縮會很有用(至少對於靜態檔案來說),除非處理器利用率已經很高。
動態處理會影響 CPU 資源。對動態響應啟用壓縮後,每次請求動態響應時都會進行壓縮。這意味著並不緩衝動態響應,每次請求動態響應時,伺服器可能需要更多的 CPU 週期來壓縮和發送響應。已壓縮的靜態響應可以被緩衝,因此不會像動態響應那樣影響 CPU 資源。
HTTP 壓縮的工作原理:
IIS 在接收到請求時,將檢查瀏覽器是否允許壓縮。然後 IIS 會檢查副檔名,以確定請求的檔案是否為靜態檔案或包含動態內容。如果檔案包含靜態內容,IIS 將查看以前是否請求過該檔案並且已將該檔案以壓縮格式儲存在臨時壓縮目錄中。如果檔案沒有以壓縮格式儲存,IIS 會將未壓縮的檔案發送到瀏覽器,並在臨時壓縮目錄中添加此檔案的壓縮副本。如果檔案以壓縮格式儲存,IIS 會將壓縮過的檔案發送給瀏覽器。在瀏覽器首次請求之前,所有檔案都不壓縮。
如果檔案包含動態內容,IIS 將在產生此響應時進行壓縮並將壓縮後的響應發送給瀏覽器。不儲存此檔案的副本。
壓縮靜態檔案的效能代價較小,而且通常只壓縮一次,因為該檔案隨後被儲存在臨時壓縮目錄中。壓縮動態產生的檔案的代價要高一些,因為它們並不儲存,並且每次請求時都必須重建。在瀏覽器上展開檔案的代價非常小。壓縮檔的下載速度更快,所以對於提高使用有限頻寬的網路連接(如數據機串連)的所有瀏覽器的效能特別有好處。
預設情況下,壓縮檔的到期日是 1997 年 1 月 1 日,以防止Proxy 伺服器將緩衝的壓縮檔副本發送到未啟用壓縮的瀏覽器。這也意味著瀏覽器在下一次使用者請求時並不顯示檔案的快取複本,而是返回伺服器請求新副本。
啟用 HTTP 壓縮:
如果伺服器產生大量的動態內容,則需要考慮壓縮造成的額外處理代價是否值得付出。如果 % 處理器時間計數器已經達到或超過 80%,則不建議啟用 HTTP 壓縮。
測試 HTTP 壓縮:
要建立一個基準,請使用系統監視器記錄幾天內“處理器”對象的 % 處理器時間計數器的值。此計數器有一個總執行個體以及系統中每個處理器的單獨執行個體。(如果伺服器有多個處理器,應該同時觀察單個處理器和總的處理器情況,以發現工作量分配不平衡之處)此外,還應該記錄“網路介面”對象的發送的位元組數/秒計數器。 啟用壓縮並繼續在一段時間內記錄這些計數器的值,最好是幾天,這樣就能得到好的對比依據。 將未壓縮時的值和壓縮過的值相比較。
現在引入正題,
如何配置 Microsoft Internet Information Server 6.0 實現 HTTP 壓縮:
有很多第三方工具可以實現 HTTP 壓縮,但都是需要購買的,價格在 100 到 300 美圓不等,如: http://www.port80soft.com/ 的 HTTPZip,如果不希望額外花錢實現這一功能的話,只好自己辛苦一下,接著看吧:
1.首先備份 IIS 的設定檔,
複製 C:\Windows\system32\inetsrv\metabase.xml 到另外的備份檔案夾中.
C:\Windows\system32\inetsrv\metabase.xml 是 IIS 的核心設定檔,該檔案的完整性一但被破壞,IIS 將無法正常運行,嚴重到需要重新安裝系統.
2. 在開始菜單中啟動 Internet 資訊服務(IIS)管理器,右鍵點擊“網站”屬性,開啟“服務”選項卡,勾選“HTTP 壓縮”的兩個選項。“臨時目錄”和“臨時目錄最大容量”可根據需要自行設定。設定完成後點擊確定。
3.右鍵點擊“網站”下方的 “Web服務擴充”,添加一個新的Web服務擴充,副檔名填寫為“HTTP Compression”或其他,都可以。“要求的檔案”添加:c:\windows\system32\inetsrv\gzip.dll ,並勾選“設定擴充狀態為允許”,完成後點擊確定。
4.下面的步驟有些複雜,如果沒有確定的把握能理解,最好不要嘗試,右鍵點擊“Internet 資訊服務的”“本機電腦”屬性,勾選“允許直接編輯設定資料庫”並確定。
5. 在開始菜單中運行 notepad C:\Windows\system32\inetsrv\metabase.xml ,開啟metabase.xml 檔案,請在任何改動前再次確認該檔案已經備份。
6. 搜尋並找到 metabase.xml 檔案中的 <IIsCompressionScheme 片段中的 HcScriptFileExtensions,依照原有檔案的格式添加你希望進行 HTTP 壓縮的副檔名,靜態檔案HcFileExtensions可添加 JS,CSS 等; 動態檔案 HcScriptFileExtensions 可添加"ASPX""ASMX",如下:
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="0"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="FALSE"
HcDynamicCompressionLevel="9"
HcFileExtensions="htm
html
js
css
txt"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
asmx
dll
exe"
>
</IIsCompressionScheme>
<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
js
css
txt"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
asmx
dll
exe"
>
</IIsCompressionScheme>
注意“Compression/deflate”和“Compression/gzip”兩個片段都需要修改。動態壓縮等級,HcDynamicCompressionLevel 建議設定為“9”
7. 儲存並關閉 metabase.xml 檔案。
8. 重新啟動 IIS 服務,運行“IISReset”或重新啟動 WWW 服務。
9. 其他:
如果你的伺服器上某一個Web網站不希望啟用 IIS 壓縮,請運行以下指令碼:
cscript C:\Inetpub\AdminScripts\adsutil.vbs set w3svc/site#/root/DoStaticCompression False
cscript C:\Inetpub\AdminScripts\adsutil.vbs set w3svc/site#/root/DoDynamicCompression False
如果想增加啟用 HTTP 壓縮的檔案類型,請運行以下指令碼:
"" 中為副檔名,別忘了把原有的副檔名加上。
靜態檔案壓縮:
CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"
CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"
動態檔案壓縮:
CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "aspx" "asmx" "dll" "exe" "php"
CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "aspx" "asmx" "dll" "exe" "php"
將site# 替換為該 Web 網站的 ID。Web 網站的 ID 是什麼到“日誌記錄屬性”中看一下日誌記錄的“記錄檔名”前面的路徑就知道了。
運行以上指令碼前務必備份,運行後再次執行“IISReset”使生效.
現在看一下 HTTP 壓縮後的效果吧:
測試 HTTP 壓縮效果的工具:
http://www.pipeboost.com/
http://www.seoconsultants.com/tools/compression.asp