web-dev-qa-db-ja.com

IIS 7が特定の(すべてではない)MIMEタイプを圧縮で無視しているのはなぜですか?エラーが表示されます:DYNAMIC_COMPRESSION_NOT_SUCCESS-理由12

ですから、私は少しIIS7 n00bですが、3に戻って古いIISシステムのほとんどを使用しました。ダイナミック圧縮をオンにしようとしていますが、ほとんどが機能しています。 。バッチ処理されているかどうかに関係なく、ADO.Net Data Service(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 ***
11
Peter Oehlert

OK、これをweb.configで構成することはできず、appHost.configのみで構成できます。私はドキュメントがappHost.configを言っていると思いましたが、それは一般的な概念の仕様であり、唯一の許容される構成場所ではないと想定していました。

7
Peter Oehlert

ピーター、ヒントをありがとう-私たちはその設定も見つけました

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

<httpCompression>applicationHost.configセクションでこれを修正しました。

また、圧縮コードのバグのため、 エンコーディングを指定 する必要がありました。

圧縮コードには、応答ヘッダーの文字セットが正しく解析されないというバグがあるため、動的圧縮設定で「application/xml; charset = utf-8」を構成して機能させる必要があります。

ここに完全に関連するセクションがあります

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml; charset=utf-8" 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>
3
Jeff Atwood

PowerShellから不足しているmimetypeを追加するには、次のコマンドを使用します。

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='application/javascript'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='image/svg+xml'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='text/css'; enabled='True'}

IISが最初に一致するように見えるため、mimeTypesの順序が重要です。これは、ワイルドカード(*)を含むmimeTypesがワイルドカードを含まないmimeTypesの下にある必要があることを意味します。したがって、mimeTypeが*/*は下部にあり、その下のエントリは使用されません。

編集:

IISは最悪なので、最善のオプションは、staticTypesをクリアし、すべてを正しい順序で再度追加することです。

Clear-WebConfiguration -Filter "//system.webServer/httpCompression/staticTypes/add" -PSPath 'IIS:\'

SetCompressionOfMimeType 'text/*' 'True'
SetCompressionOfMimeType 'application/javascript' 'True'
SetCompressionOfMimeType 'image/svg+xml' 'True'
SetCompressionOfMimeType 'text/css' 'True'
SetCompressionOfMimeType '*/*' 'False'


function SetCompressionOfMimeType($mimeType, $enabled){
    Write-Output "Setting compression for $mimeType to $enabled"
    Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -Value @{mimeType=$mimeType; enabled=$enabled}
}
0
Marius