HTTP 壓縮原理速覽
- 瀏覽器送出
Accept-Encoding: gzip, deflate。
- IIS 依副檔名判斷是否壓縮 (靜態檔查
HcFileExtensions,動態檔查 HcScriptFileExtensions)。
- 靜態檔:檢查壓縮快取目錄,有則直接回傳 .gz,無則即時壓縮並快取。
- 動態檔:即時壓縮回傳,不快取。
啟用步驟 (IIS 6 / Windows Server 2003)
1. IIS 管理介面基本設定
「網站」→ 右鍵「內容」→「服務」分頁 → 勾選「壓縮應用程式檔案」與「壓縮靜態檔案」,設定暫存目錄與大小上限。
2. (可略過) Web 服務擴展添加 gzip.dll
實測此步驟非必要,保留相容性即可。
3. 核心:編輯 MetaBase.xml
- 停止「IIS Admin Service」服務 (否則檔案被鎖定無法存檔)。
- 備份
C:\Windows\System32\inetsrv\MetaBase.xml。
- 尋找
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"> 與 deflate 兩節點。
- 關鍵屬性設定:
| 屬性 | 建議值 | 說明 |
| HcDoDynamicCompression | TRUE | 啟用動態壓縮 (ASPX、ASHX 等) |
| HcDoStaticCompression | TRUE | 啟用靜態壓縮 |
| HcDoOnDemandCompression | TRUE | 啟用按需壓縮 (首次請求即時壓縮) |
| HcDynamicCompressionLevel | 9 | 動態壓縮等級 0-10,9 為性價比最佳 |
| HcOnDemandCompLevel | 9 | 按需壓縮等級 |
| HcFileExtensions | htm html txt js css swf xml json | 靜態檔副檔名白名單 |
| HcScriptFileExtensions | asp aspx ashx asmx dll exe | 動態檔副檔名白名單 |
4. 範例設定片段
<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 json"
HcOnDemandCompLevel="9"
HcPriority="1"
HcScriptFileExtensions="asp aspx ashx asmx dll exe" />
5. 重新啟動 IIS 驗證
- 用 Fiddler/瀏覽器開發者工具檢查回應標頭
Content-Encoding: gzip。 - YSlow 評分:僅靜態壓縮得 B,動靜態全開得 A。
常見坑點總結
- 必須先停止 IIS Admin Service 才能存檔 MetaBase.xml。
- 壓縮等級對 jQuery 等已最佳化 JS 檔效果有限 (大小不變)。
- 圖片 (JPG/PNG/GIF) 已壓縮,再開 Gzip 無增益且浪費 CPU。
- 步驟 2 (Web 服務擴展) 可省略,不影響結果。