我已經在 IIS 7 中開啟了動態內容壓縮,但 Fiddler 顯示我的動態頁面仍在沒有內容編碼的情況下提供:gzip。
靜態內容壓縮在同一伺服器上運作良好。
不確定這是否重要,但大多數動態頁面都是 Coldfusion 頁面(Coldfusion 配置為 ISAPI 擴充功能),我們也使用 IIS URL 重寫模組。
這是來自我的 applicationhost.config。
<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>
...
<urlCompression doDynamicCompression="true" />
這是一個範例請求:
GET / HTTP/1.1
Host: web5.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
和響應頭:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.0
...
Date: Mon, 22 Feb 2010 20:59:36 GMT
答案1
您可以按照此處提及的故障排除步驟進行操作。使用服務帳戶在 IIS 6 和 IIS 7 中進行 HTTP 壓縮
答案2
“Content-Endcoding:分塊”不應出現在伺服器回應中。 「分塊」完全是 HTTP 規範的一個獨立部分,即「傳輸編碼」。除了「傳輸編碼:分塊」之外,您還應該尋找「內容編碼:gzip」。以下是 Google 主頁的範例:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Wed, 17 Feb 2010 13:43:22 GMT
Expires: Wed, 17 Feb 2010 13:43:22 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Wed, 17 Feb 2010 13:43:22 GMT
Server: igfe
Transfer-Encoding: chunked
Content-Encoding: gzip
現在,就調試問題而言,IIS7 根據內容類型進行壓縮。因此,當它看到“Content-Type:text/html”時,它會壓縮頁面。因此,首先,請確保您的腳本返回 IIS 視為可壓縮的內容類型 (text/*)。
此外,預設情況下,IIS 不會壓縮 HTTP/1.0 請求(由某些代理(例如 Squid)使用)或指示請求來自代理伺服器的標頭(Via: 或 X-Forwarded-For:)的頁面。這是一個保守的預設設置,用於處理大量無法正確處理壓縮 HTTP 內容的舊代理程式。您可以透過編輯 IIS 設定檔(在伺服器或網站層級)來覆寫此行為。
最後,請確保您的客戶端在請求中傳送「Accept-Encoding:gzip」標頭。如果它是標準瀏覽器,則預設情況下會,但如果您使用 wget 或其他工具,則可能不會。您可以使用提琴手查看整個 HTTP 會話,包括標頭和資料。
答案3
做了一些研究我發現這這表示當 Coldfusion 端從範本產生 HTML 時,也需要啟用壓縮。我找不到確切的來源,但如果我沒記錯的話,動態壓縮是針對 ASP.Net 和 PHP 的,但對於後者,它仍然需要在 PHP 框架中啟用。
因此,我假設您沒有看到壓縮發生的原因是因為它需要在生成器端啟用,在本例中為 Coldfusion。
答案4
請使用記事本編輯 applicationHost.config。我浪費了幾個小時才明白我在記事本++(以及 Visual Studio 2010 編輯器!!)中所做的更改沒有被 IIS 應用。
將額外的 mimeType 新增至dynamicTypes/staticTypes 集合中的替代方法是使用appcmd。"C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost
再說一次:進行這些更改後 - 您只能在記事本中看到它們。 Notepad++(以及 Visual Studio 2010 編輯器!!)為 applicationHost.config 維護某種該死的替代現實/儲存。即使在記事本中編輯文件並在 np++/VS 中重新開啟之後,它也會向您顯示他自己的文件版本(與您在記事本中看到的版本不同)。