配置 <配置>
概觀
元素<scheme>
的 <httpCompression>
元素會針對 網際網路資訊服務 (IIS) 7 中的 GNU zip (Gzip) 和 Deflate 壓縮設定指定下列設定:
名稱和 dll 屬性分別指定壓縮配置的名稱和提供者 DLL。 IIS 7 同時支援 Gzip 和 Deflate 壓縮,而且兩種壓縮配置目前都實作於 %windir%\system32\inetsrv\gzip.dll。
doStaticCompression 屬性會指定是否針對 name 屬性所指定的壓縮配置啟用靜態壓縮。 將 doStaticCompression 設定為 true 會指定用戶端要求時,將會壓縮靜態內容。 如果啟用靜態壓縮,則包含 “Accept-Encoding: gzip” 或 “Accept-Encoding: deflate” 標頭的靜態內容要求都會壓縮內容,只要 IIS 中啟用標頭中指定的壓縮配置即可。 如果要求不包含此標頭,或標頭指定 IIS 中未啟用的壓縮配置,則不會壓縮內容。
如果 IIS 判斷應該壓縮回應,IIS 會檢查 HTTPCompression> 元素目錄<屬性所指定的壓縮目錄。 如果在目錄中找到靜態檔案的全新壓縮版本,則會將它傳送至客戶端瀏覽器。 如果找不到檔案的全新壓縮版本,且使用 urlCompression 元素的< dynamicCompressionBeforeCache> 屬性啟用隨選壓縮,IIS 會以未壓縮的形式傳送要求的檔案,並將該檔案新增至背景壓縮佇列。
doDynamicCompression 屬性會指定是否針對 name 屬性所指定的壓縮配置啟用動態壓縮。 將 doDynamicCompression 設定為 true 會指定用戶端要求時,將會壓縮動態內容。 如果啟用動態壓縮,每個包含 “Accept-Encoding: gzip” 或 “Accept-Encoding: deflate” 標頭的動態內容要求都會壓縮內容,只要 IIS 中啟用標頭中指定的壓縮配置即可。 如果要求不包含此標頭,或標頭指定 IIS 中未啟用的壓縮配置,則不會壓縮內容。
注意
由於動態內容的定義一律會變更,因此 IIS 不會快取動態內容的壓縮版本。 動態壓縮會耗用相當多的CPU時間和記憶體資源,而且應該只用於具有慢速網路連線和備用CPU時間的伺服器上。
當 IIS 分別壓縮動態或靜態內容時,dynamicCompressionLevel 和 staticCompressionLevel 屬性會指定壓縮配置的壓縮層級。 較低的壓縮層級會產生稍微較大的壓縮檔案,但整體對 CPU 和記憶體資源的影響較低。 較高的壓縮層級通常會導致較小的壓縮檔案,但 CPU 和記憶體使用量較高。
注意
根據預設,IIS 7 中只能使用 Gzip 壓縮配置。 若要以程式設計方式啟用Deflate壓縮配置,請參閱 本檔的程式代碼範例 一節。
相容性
版本 | 備註 |
---|---|
IIS 10.0 | 未 <scheme> 在 IIS 10.0 中修改專案。 |
IIS 8.5 | 專案 <scheme> 未在 IIS 8.5 中修改。 |
IIS 8.0 | 專案 <scheme> 未在 IIS 8.0 中修改。 |
IIS 7.5 | 專案 <scheme> 未在 IIS 7.5 中修改。 |
IIS 7.0 | 元素 <scheme> 的 <httpCompression> 元素是在 IIS 7.0 中引進的。 |
IIS 6.0 | 元素 <scheme> 會取代下列 IIS 6.0 中繼基底屬性:
|
設定
HTTP 壓縮通常會在 IIS 7 和更新版本的預設安裝上使用。 不過,預設只會安裝靜態壓縮。 若要安裝靜態或動態壓縮,請使用下列步驟。
Windows Server 2012 或 Windows Server 2012 R2
- 在工作列上,按一下 [伺服器管理員] 。
- 在 伺服器管理員 中,按兩下 [管理] 功能表,然後按下 [新增角色和功能]。
- 在 [ 新增角色和功能 精靈] 中,按 [ 下一步]。 選取安裝類型,然後按 [ 下一步]。 選取目的地伺服器,然後按 [下一步]。
- 在 [伺服器角色] 頁面上,依序展開 [網頁伺服器]、[網頁伺服器] 和 [效能],然後選取 [靜態內容壓縮] 和/或 [動態內容壓縮]。 按一下 [下一步] 。
- 在 [選取功能] 頁面上,按一下 [下一步] 。
- 在 [確認安裝選項] 頁面上,按一下 [安裝] 。
- 在 [結果] 頁面上,按一下 [關閉] 。
Windows 8 或 Windows 8.1
- 在 [開始] 畫面上,將指標一路移至左下角,以滑鼠右鍵按兩下 [開始] 按鈕,然後按兩下 [控制台]。
- 在 控制台 中,按兩下 [程式和功能],然後按兩下 [開啟或關閉 Windows 功能]。
- 依序展開 [網際網路資訊服務]、[萬維網服務]、[效能功能],然後選取 [動態內容壓縮] 和/或 [靜態內容壓縮]。
- 按一下 [確定]。
- 按一下 [關閉] 。
Windows Server 2008 或 Windows Server 2008 R2
- 在任務欄上,按兩下 [開始],指向 [系統管理工具],然後按兩下 [伺服器管理員]。
- 在 [伺服器管理員 階層] 窗格中,展開 [角色],然後按兩下 [網頁伺服器] [IIS]。
- 在 [Web 伺服器 (IIS)] 窗格中,捲動至 [角色服務] 區段,然後按兩下 [新增角色服務]。
- 在 [新增角色服務精靈] 的 [選取角色服務] 頁面上,如果您想要安裝動態壓縮和靜態內容壓縮,如果您想要安裝靜態壓縮,請選取 [動態內容壓縮],然後按 [下一步]。
- 在 [確認安裝選項] 頁面上,按一下 [安裝] 。
- 在 [結果] 頁面上,按一下 [關閉] 。
Windows Vista 或 Windows 7
- 在任務欄上,按兩下 [開始],然後按兩下 [控制台]。
- 在 控制台 中,按兩下 [程式和功能],然後按兩下 [開啟或關閉 Windows 功能]。
- 依序展開 [網際網路資訊服務]、[萬維網服務] 和 [效能功能]。
- 如果您想要安裝動態壓縮,請選取 [Http Compression Dynamic],如果您想要安裝靜態壓縮,請選取 [靜態內容壓縮]。
- 按一下 [確定]。
作法
沒有使用者介面可設定 IIS 7 的壓縮配置。 如需如何以程式設計方式設定壓縮配置的範例,請參閱 本檔的<程式代碼範例 >一節。
組態
屬性
屬性 | 描述 |
---|---|
dll |
必要的字串屬性。 指定與壓縮配置相關聯之壓縮 DLL 的完整檔案系統路徑和檔名。 萬維網發佈服務 (WWW 服務) 必須先重新啟動,此屬性的任何變更才會生效。 |
doDynamicCompression |
選擇性的 Boolean 屬性。 指定是否壓縮動態內容的回應,例如 Active Server Pages (ASP) 和 ISAPI 延伸模組中的腳本。 如果此值在個別壓縮配置層級變更,必須在變更生效之前重新啟動 WWW 服務。 預設值是 true 。 |
doStaticCompression |
選擇性的 Boolean 屬性。 指定 IIS 是否壓縮對靜態內容要求的回應。 因為這個屬性無法繼承,所以如果 name 屬性設定為 Gzip,則必須在全域層級 (<HTTPCompression>) 和個別配置層級設定為 true。 如果此值在個別壓縮配置層級變更,必須在變更生效之前重新啟動 WWW 服務。 注意: 靜態壓縮存放區必須位於磁碟分區或使用NTFS格式化的遠端共用中。 如果檔案存放區不是NTFS,則會停用靜態壓縮。 基於安全性考慮,FAT 快取存放區不會提供任何壓縮的回應。 預設值是 true 。 |
dynamicCompressionLevel |
選擇性 uint 屬性。 指定壓縮動態內容時壓縮配置的壓縮層級。 層級的範圍從 0(最低壓縮層級和最低 CPU 使用量)到 10(最高壓縮層級和最高 CPU 使用量)。 在對此屬性進行任何變更生效之前,必須先重新啟動 WWW 服務。 注意: 因為動態壓縮會耗用相當多的 CPU 時間和記憶體資源,所以只會在網路連線緩慢和 CPU 時間備援的伺服器上使用它。 壓縮的靜態回應可以快取,因此不會影響 CPU 資源,因為動態回應也一樣。 預設值是 0 。 |
name |
必要的字串屬性。 指定壓縮配置的名稱。 例如, Gzip 或 Deflate。 |
staticCompressionLevel |
選擇性 uint 屬性。 在壓縮靜態內容時,指定壓縮配置的壓縮層級。 層級的範圍從 0(最低壓縮層級和最低 CPU 使用量)到 10(最高壓縮層級和最高 CPU 使用量)。 0 表示已停用壓縮。 在對此屬性進行任何變更生效之前,必須先重新啟動 WWW 服務。 預設值是 7 。 |
子元素
元素 | 描述 |
---|---|
remove |
選擇性項目。 從 HTTP 壓縮配置集合中移除 HTTP 壓縮配置的參考。 |
clear |
選擇性項目。 從 HTTP 壓縮配置集合中移除 HTTP 壓縮配置的所有參考。 |
組態範例
下列預設 <httpCompression>
元素是在 IIS 7 的 ApplicationHost.config 檔案中設定。 除非您使用 元素,否則此組態區段會繼承預設組 <clear>
態設定。
<httpCompression
directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
範例程式碼
下列程式代碼範例會將deflate壓縮配置新增至IIS 7。
AppCmd.exe
appcmd.exe set config -section:system.webServer/httpCompression /+"[name='deflate',doStaticCompression='True',doDynamicCompression='True',dll='%Windir%\system32\inetsrv\gzip.dll']" /commit:apphost
注意
當您使用 AppCmd.exe 來設定這些設定時,請務必將認可參數apphost
設定為 。 這會將組態設定認可到 ApplicationHost.config 檔案中的適當位置區段。
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection httpCompressionSection = config.GetSection("system.webServer/httpCompression");
ConfigurationElementCollection httpCompressionCollection = httpCompressionSection.GetCollection();
ConfigurationElement schemeElement = httpCompressionCollection.CreateElement("scheme");
schemeElement["name"] = @"deflate";
schemeElement["doStaticCompression"] = true;
schemeElement["doDynamicCompression"] = true;
schemeElement["dll"] = @"%Windir%\system32\inetsrv\gzip.dll";
httpCompressionCollection.Add(schemeElement);
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim httpCompressionSection As ConfigurationSection = config.GetSection("system.webServer/httpCompression")
Dim httpCompressionCollection As ConfigurationElementCollection = httpCompressionSection.GetCollection
Dim schemeElement As ConfigurationElement = httpCompressionCollection.CreateElement("scheme")
schemeElement("name") = "deflate"
schemeElement("doStaticCompression") = True
schemeElement("doDynamicCompression") = True
schemeElement("dll") = "%Windir%\system32\inetsrv\gzip.dll"
httpCompressionCollection.Add(schemeElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var httpCompressionSection = adminManager.GetAdminSection("system.webServer/httpCompression", "MACHINE/WEBROOT/APPHOST");
var httpCompressionCollection = httpCompressionSection.Collection;
var schemeElement = httpCompressionCollection.CreateNewElement("scheme");
schemeElement.Properties.Item("name").Value = "deflate";
schemeElement.Properties.Item("doStaticCompression").Value = true;
schemeElement.Properties.Item("doDynamicCompression").Value = true;
schemeElement.Properties.Item("dll").Value = "%Windir%\\system32\\inetsrv\\gzip.dll";
httpCompressionCollection.AddElement(schemeElement);
adminManager.CommitChanges();
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set httpCompressionSection = adminManager.GetAdminSection("system.webServer/httpCompression", "MACHINE/WEBROOT/APPHOST")
Set httpCompressionCollection = httpCompressionSection.Collection
Set schemeElement = httpCompressionCollection.CreateNewElement("scheme")
schemeElement.Properties.Item("name").Value = "deflate"
schemeElement.Properties.Item("doStaticCompression").Value = True
schemeElement.Properties.Item("doDynamicCompression").Value = True
schemeElement.Properties.Item("dll").Value = "%Windir%\system32\inetsrv\gzip.dll"
httpCompressionCollection.AddElement(schemeElement)
adminManager.CommitChanges()