Iis-7

為什麼 IIS 7 忽略某些(但不是全部)MIME 類型進行壓縮?給出錯誤:DYNAMIC_COMPRESSION_NOT_SUCCESS - 原因 12

  • October 28, 2015

所以,我有點像 IIS7 n00b,但我已經使用了大多數可以追溯到 3 的舊 IIS 系統。我正在嘗試打開動態壓縮並且它大部分都在工作。它不適用於我的 ADO.Net 數據服務 (Astoria) 請求,無論是否批處理。

我發現失敗的請求 (FREB) 跟踪真的很有幫助。我在未批處理的請求中看到的是Reason Code 12, NO_MATCHING_CONTENT_TYPE. 好的,所以我沒有指定匹配的 MIME 類型,這很容易。

除了這是我的 web.config 中的內容(我認為這是正確的,但也許不是)。

<httpCompression dynamicCompressionDisableCpuUsage="100"
                dynamicCompressionEnableCpuUsage="100"
                noCompressionForHttp10="false"
                noCompressionForProxies="false"
                noCompressionForRange="false"
                sendCacheHeaders="true"
                staticCompressionDisableCpuUsage="100"
                staticCompressionEnableCpuUsage="100">
   <dynamicTypes>
       <clear/>
       <add mimeType="*/*"
            enabled="true" />
   </dynamicTypes>
   <staticTypes>
       <clear/>
       <add mimeType="*/*"
            enabled="true" />
   </staticTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
               doStaticCompression="true"
               dynamicCompressionBeforeCache="false" />

現在我認為這意味著它應該壓縮任何包含 Accept:Gzip 標頭的請求。我很想知道其他人在這裡會怎麼想。

我的提琴手踪跡:

GET /SecurityDataService.svc/GetCurrentAccount HTTP/1.1
Accept-Charset: UTF-8
Accept-Language: en-us
dataserviceversion: 1.0;Silverlight
Accept: application/atom+xml,application/xml
maxdataserviceversion: 1.0;Silverlight
Referer: http://sdev03/apptestpage.aspx
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Host: sdev03
Connection: Keep-Alive
Cookie: .ASPXAUTH=<snip>


HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/atom+xml;charset=utf-8
Server: Microsoft-IIS/7.0
DataServiceVersion: 1.0;
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 22 Mar 2010 22:29:06 GMT
Content-Length: 2726

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
*** <snip> removed ***

好的,事實證明你不能在 web.config 中配置它,只能在 appHost.config 中配置。我以為文件確實說過 appHost.config 但我以為它是一般概念的規範,而不是唯一允許的配置位置。

彼得,感謝您的提示——我們還發現設置

<add mimeType="application/atom+xml; charset=utf-8" enabled="true" />

在修復這個<httpCompression>部分。applicationHost.config

由於壓縮程式碼中的錯誤,我們還必須指定編碼:

壓縮程式碼中存在一個錯誤,它無法正確解析響應標頭中的字元集,因此您必須在動態壓縮設置中配置“application/xml; charset=utf-8”才能使其正常工作。

這是完整的相關部分

&lt;httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"&gt;
   &lt;scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" /&gt;
   &lt;scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" /&gt;
   &lt;dynamicTypes&gt;
       &lt;add mimeType="text/*" enabled="true" /&gt;
       &lt;add mimeType="message/*" enabled="true" /&gt;
       &lt;add mimeType="application/x-javascript" enabled="true" /&gt;
       &lt;add mimeType="application/atom+xml; charset=utf-8" enabled="true" /&gt;
       &lt;add mimeType="*/*" enabled="false" /&gt;
   &lt;/dynamicTypes&gt;
   &lt;staticTypes&gt;
       &lt;add mimeType="text/*" enabled="true" /&gt;
       &lt;add mimeType="message/*" enabled="true" /&gt;
       &lt;add mimeType="application/javascript" enabled="true" /&gt;
       &lt;add mimeType="*/*" enabled="false" /&gt;
   &lt;/staticTypes&gt;
&lt;/httpCompression&gt;

引用自:https://serverfault.com/questions/125139