2011-08-01 129 views
5

我有啓用了靜態和動態壓縮的IIS 7.5。它對於動態文件似乎工作正常,但對於靜態文件,它的行爲不正常,當內容未被壓縮時通常發送http頭「Content-Encoding:gzip」。這會導致瀏覽器嘗試解壓縮,並拋出無效的幻數錯誤。下面是我的配置:IIS7中的GZip壓縮不起作用,但內容編碼頭設置爲gzip

<httpCompression dynamicCompressionDisableCpuUsage="95" dynamicCompressionEnableCpuUsage="70" > 
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> 
    <dynamicTypes> 
    <add mimeType="text/*" enabled="true" /> 
    <add mimeType="application/javascript" enabled="true" /> 
    <add mimeType="application/x-javascript" enabled="true" /> 
    <add mimeType="application/json" 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="application/x-javascript" enabled="true" /> 
<add mimeType="*/*" enabled="false" /> 
    </staticTypes> 

我認爲某些HTTP模塊的某處解壓內容順着管道,但他們都不懷疑。有任何想法嗎?

回答

2

嘗試在默認禁用緩存之前啓用動態壓縮。

<urlCompression dynamicCompressionBeforeCache="true" doDynamicCompression="true" doStaticCompression="true" /> 
+1

感謝您的建議。我試圖將該行放在下,但它沒有任何區別。任何想法? – sboisse

0

花了我一會兒才弄清楚了。在applicationHost.config文件的system.webServer/serverRuntime節點上將頻率上限閾值屬性設置爲1應該有效,如http://www.iis.net/ConfigReference/system.webServer/serverRuntime所述。

您可以通過以管理員身份執行以下命令來做到這一點:

%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost 

一個警告 - 在「頻打」的概念似乎沒有具體的壓縮。我不知道是否有其他後果由於設置!

2

我在調查中發現在靜態文件上使用HttpContext.RewritePath()會導致此問題。

+0

這很奇怪,但我也看到這是真實的,至少在我的一臺QA服務器(W2K8/IIS 7.5)上。 – rsbarro