一.摘要
本文(wén)總結了(liǎo)如(rú)何(hé)為使(shǐ)用(yòng)IIS托(tuō)管(guǎn)的網(wǎng)站啟用(yòng)Gzip壓縮(suō), 從(cóng)而減少(shǎo)網(wǎng)頁(yè)網(wǎng)絡傳(chuán)輸大小(xiǎo), 提高(gāo)用戶(hù)顯示(shì)頁麵的速(sù)度.
二.前言(yán)
本文的知(zhī)識點是從(cóng)互(hù)聯網收(shōu)集整(zhěng)理, 主要來源(yuán)於中文(wén)wiki. 使用YSlow檢測網站啟用了哪些(xiē)優(yōu)化時(shí), Gzip是十(shí)分(fēn)關(guān)鍵(jiàn)的一項. 啟動Gip壓縮(suō)將立竿(gān)見(jiàn)影(yǐng)的(dí)減少頁麵的(dí)網(wǎng)絡傳輸(shū)大(dà)小.
三.HTTP壓縮概述(shù)
HTTP壓(yā)縮(suō)是在(zài)Web服(fú)務(wù)器(qì)和(hé)瀏(liú)覽(lǎn)器間(jiān)傳輸壓縮文本(běn)內容的方法(fǎ)。HTTP壓縮采(cǎi)用通用(yòng)的壓縮(suō)算(suàn)法如gzip等(děng)壓縮(suō)HTML,JavaScript或CSS文件。壓(yā)縮(suō)的(dí)最大(dà)好(hǎo)處就是降(jiàng)低了(liǎo)網絡(luò)傳輸(shū)的(dí)數(shù)據(jù)量,從(cóng)而(ér)提高(gāo)客戶(hù)端(duān)瀏覽器的(dí)訪(fǎng)問(wèn)速度。當然(rán),同(tóng)時(shí)也會(huì)增(zēng)加一(yī)點(diǎn)點(diǎn)服務(wù)器的(dí)負(fù)擔(dān)。Gzip是(shì)比較常見(jiàn)的一(yī)種HTTP壓(yā)縮算法。
四.HTTP壓(yā)縮(suō)工(gōng)作(zuò)原理
Web服務(wù)器(qì)處理HTTP壓縮的工作原理如(rú)下:
1.Web服務器(qì)接收到(dào)瀏覽(lǎn)器(qì)的HTTP請求後,檢查瀏(liú)覽器是(shì)否支(zhī)持HTTP壓(yā)縮(suō);
在(zài)用戶瀏(liú)覽(lǎn)器發(fā)送請求的(dí)HTTP頭(tóu)中(zhōng), 帶(dài)有(yǒu)"Accept-Encoding: gzip, deflate"參數則表明支持(chí)gzip和deflate兩(liǎng)種壓縮算(suàn)法.
2.如(rú)果瀏(liú)覽(lǎn)器(qì)支(zhī)持HTTP壓(yā)縮(suō),Web服(fú)務器(qì)檢查(chá)請求文件的後綴(zhuì)名(míng);
靜(jìng)態文件(jiàn)和(hé)動(dòng)態(tài)文件後綴啟動要(yào)所都需(xū)要在MetaBase.xml中設置.
靜態文(wén)件需要設置: HcFileExtensions Metabase Property (單擊(jī)跳轉到(dào)MSDN說明)
動(dòng)態文(wén)件需(xū)要設置: HcScriptFileExtensions Metabase Property (單擊跳轉到MSDN說明)
3.如(rú)果請求文(wén)件(jiàn)是(shì)HTML,CSS等靜態文件並(bìng)且文(wén)件後(hòu)綴啟用了壓縮,則Web服務器(qì)到壓縮緩衝(chōng)目(mù)錄中(zhōng)檢查(chá)是否已(yǐ)經存在請(qǐng)求文(wén)件(jiàn)的(dí)最新(xīn)壓縮文件;
4.如(rú)果(guǒ)請(qǐng)求文件(jiàn)的壓(yā)縮文件(jiàn)不(bù)存在,Web服(fú)務器(qì)向(xiàng)瀏(liú)覽器返(fǎn)回未壓縮的請求文(wén)件,並(bìng)在壓(yā)縮(suō)緩衝目錄中(zhōng)存(cún)放(fàng)請求(qiú)文(wén)件的(dí)壓(yā)縮文(wén)件;
5.如果(guǒ)請求文件的(dí)最(zuì)新壓縮文件已經存在(zài),則(zé)直(zhí)接返(fǎn)回(huí)請(qǐng)求文件的(dí)壓(yā)縮(suō)文(wén)件(jiàn);
6.如果請(qǐng)求(qiú)文件是(shì)ASPX等動(dòng)態文件並且文(wén)件(jiàn)後綴啟(qǐ)用(yòng)了壓縮(suō),Web服(fú)務器動態壓縮內(nèi)容並返(fǎn)回瀏覽器,壓縮(suō)內(nèi)容不存放(fàng)到(dào)壓(yā)縮緩存目錄(lù)中(zhōng)。
五. 在IIS中(zhōng)啟用(yòng)HTTP壓縮
IIS默認(rèn)並不支(zhī)持HTTP壓(yā)縮(suō),需要(yào)進(jìn)行簡(jiǎn)單(dān)的配置(zhì)
1.打(dǎ)開Internet信息服務(IIS)管理(lǐ)器,右(yòu)擊"網(wǎng)站(zhàn)"->"屬性(xìng)",選擇"服(fú)務"。在(zài)"HTTP壓(yā)縮"框(kuàng)中選(xuǎn)中(zhōng)"壓縮應用(yòng)程(chéng)序(xù)文(wén)件(jiàn)"和"壓(yā)縮(suō)靜態文(wén)件",按(àn)需(xū)要設(shè)置"臨(lín)時(shí)目錄"和"臨時目錄(lù)的最(zuì)大限製";
2.提醒: 經試(shì)驗(yàn)此步驟(zhòu)在本人機(jī)器上(shàng)沒有(yǒu)作用(yòng), 可以忽略.
在(zài)Internet信息(xī)服務(IIS)管理器(qì),右(yòu)擊(jī)"Web服(fú)務擴(kuò)展(zhǎn)"->"增加一個新的(dí)Web服(fú)務擴展...",在"新建(jiàn)Web服務(wù)擴展"框中輸(shū)入(rù)擴(kuò)展名(míng)"HTTP Compression",添加"要(yào)求的文(wén)件"為C:\WINDOWS\system32\inetsrv\gzip.dll,其(qí)中Windows係統目錄根據(jù)您(nín)的安裝可(kě)能有(yǒu)所不同(tóng),選中(zhōng)"設置擴(kuò)展狀態為允許(xǔ)";
3.使用(yòng)文本編輯器(qì)打開(kāi)C:\Windows\System32\inetsrv\MetaBase.xml(建議(yì)先備份),
找(zhǎo)到Location ="/LM/W3SVC/Filters/Compression/gzip用於(yú)設置(zhì)gzip壓(yā)縮(suō),
找(zhǎo)到(dào)Location ="/LM/W3SVC/Filters/Compression/deflate"用於設(shè)置(zhì)deflate壓縮.
上(shàng)麵兩(liǎng)個節(jié)點(diǎn)緊(jǐn)挨著.並且設置的屬(shǔ)性相同.
如果(guǒ)需(xū)要壓(yā)縮動(dòng)態文(wén)件(jiàn),則將HcDoDynamicCompression設置為"TRUE",並(bìng)在HcScriptFileExtensions中增(zēng)加您要壓縮的(dí)動(dòng)態文(wén)件後綴名,如(rú)aspx;如(rú)果需要壓(yā)縮(suō)靜(jìng)態(tài)文(wén)件(jiàn),則(zé)將(jiāng)HcDoStaticCompression和HcDoOnDemandCompression設(shè)置(zhì)為(wéi)"TRUE",並在HcFileExtensions中增加您(nín)需要壓縮(suō)的(dí)靜態文(wén)件(jiàn)後綴(zhuì)名(míng),如xml,css等(děng);HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的壓縮率,數值在(zài)0-10, 默認為(wéi)0.
HcDynamicCompressionLevel屬性說(shuō)明:HcDynamicCompressionLevel Metabase Property
HcOnDemandCompLevel 屬性說(shuō)明:HcOnDemandCompLevel Metabase Property
說明(míng): 這(zhè)兩個屬性值一般(bān)推薦設置(zhì)為9, 具(jù)有最佳性(xìng)價比.但是(shì)在我的(dí)window server 2003上, 壓縮(suō)率(shuài)無(wú)論如何設(shè)置, jQuery和(hé)jQuery UI兩(liǎng)個(gè)文(wén)件(58k/188k)壓縮後的大(dà)小一(yī)直相(xiāng)同(tóng).(20k/45k).
下麵是(shì)我(wǒ)的(dí)實(shí)例:
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="0"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="true"
HcDynamicCompressionLevel="9"
HcFileExtensions="htm
html
txt
js
css
swf
xml"
HcOnDemandCompLevel="9"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
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
txt
js
css
swf
xml"
HcOnDemandCompLevel="9"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
dll
exe"
></IIsCompressionScheme>
4.編(biān)輯完(wán)畢(bì)後(hòu)保存MetaBase.xml文(wén)件;如果(guǒ)文(wén)件(jiàn)無(wú)法保(bǎo)存(cún),則(zé)可能IIS正在使(shǐ)用該文件(jiàn)。打(dǎ)開(kāi)"開始"->"管(guǎn)理工具(jù)"->"服務",停止(zhǐ)"IIS Admin Service"後,即(jí)可保(bǎo)存;
5.最(zuì)後,重新啟動(dòng)IIS。可(kě)以(yǐ)到HTTP壓縮測試網(wǎng)站(zhàn)驗(yàn)證結(jié)果(guǒ).以jQuery為(wéi)例(lì), 核(hé)心(xīn)類庫(kù)和UI類(lèi)庫(kù)原(yuán)始(shǐ)大小(xiǎo)分別是(shì)57k和188k,壓(yā)縮(suō)後(hòu)分別是20k和45k:
我(wǒ)們(mén)通(tōng)過(guò)Http頭(tóu)中(zhōng)的(dí): Content-Encoding:gzip 屬性(xìng)判斷(duàn)返(fǎn)回(huí)後的數(shù)據(jù)已(yǐ)經啟用了gzip壓(yā)縮:
使(shǐ)用(yòng)YSlow檢測(cè), 當(dāng)隻啟動(dòng)靜(jìng)態(tài)文件壓(yā)縮(suō)時(shí), Gzip壓(yā)縮評級為B:
當(dāng)同時啟動了(liǎo)動(dòng)態(tài)文件(jiàn)壓縮時(shí), Gzip壓縮評(píng)級為(wéi)A:
六(liù).要(yào)點總(zǒng)結
1. 在(zài)修改MetaBase.xml文件時(shí), 要停(tíng)止"IIS Admin Service"服(fú)務(wù). 否(fǒu)則無(wú)法保存.
2.靜態壓(yā)縮和動態(tài)壓縮率(shuài)最好(hǎo)設置(zhì)為9.
3.上文(wén)的步驟2, 即使不(bù)添加Web服務擴展(zhǎn)效果(guǒ)也(yě)是相同的(dí).
4.壓縮(suō)率設置對js文件不起作用(yòng), 壓(yā)縮後(hòu)大小總是(shì)相同的(dí).
5.圖片(piàn)文件即使啟用了(liǎo)gzip壓縮大小(xiǎo)也沒(méi)有變化.
七. 總(zǒng)結
本文總結了如何(hé)在IIS中啟用Gzip壓(yā)縮. 在(zài)半年前的(dí)項目(mù)中我為網站(zhàn)啟用(yòng)了Gzip, 今天整(zhěng)理(lǐ)此文主要為了(liǎo)整理(lǐ)自(zì)己的知識(shí)以(yǐ)便(biàn)以後忘(wàng)記時(shí)復(fù)習. 另外經查看(kàn)ChinaCache公司(sī)提(tí)供(gōng)的CDN也都(dū)啟(qǐ)用(yòng)了(liǎo)Gzip壓縮.
--cnblogs
轉(zhuǎn)載請保(bǎo)留原(yuán)文地址: https://antelcom.cn/show-461.html

