IIS 7が特定の(すべてではない)MIMEタイプを圧縮のために無視しているのはなぜですか?エラーを与える:DYNAMIC_COMPRESSION_NOT_SUCCESS-理由12


11

だから、私は少しIIS7 n00bですが、3に戻って古いIISシステムのほとんどを使用しました。動的圧縮を有効にしようとしていますが、ほとんど機能しています。ADO.Net Data Service(Astoria)のリクエストに対して、バッチ処理されていてもされていなくても機能しません。

失敗した要求(FREB)トレースが見つかりましたがこれは非常に役立ちました。そして、私はバッチ処理されていないリクエストで見ますReason Code 12, NO_MATCHING_CONTENT_TYPE。OK、一致する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 ***

1
NOTEPADを使用してapplicationHost.configを編集してください。notepad ++(および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エディター!!)
Sasha

アレクサンダー、私はあなたがここで言っていることを100%確信しているわけではありませんが、テキストエディタでIIS構成を修正することはうまくいくと確信できます。BOMマーカーを追加するエディターでは問題があるかもしれませんが、それ以外は問題ありません。私の場合、メモ帳を使用して編集できなかったのではなく、間違ったファイルを編集していました。アプリケーションのWebルートにあるweb.configですべての構成変更を行うことはできません。一部は、Systemフォルダー内のappHostに対して作成する必要があります。
ピーターOehlert

6
@alexander:True。64ビットウィンドウでnotepad ++やvisual studioなどの32ビットアプリケーションを使用すると、WOW64がSystem32フォルダーのファイルリダイレクトをトリガーします。編集はCでクローンを作成します。64ビットプログラムでのみ32ビットプログラムから見える、それがIISで使用されることはありません\ WINDOWS \ SYSWOW64
フレドリックハグランド

Notepadは実際に動作します... Notepad ++およびVisual Studioはリダイレクトされます。
ブライアンホワイト

@FredrikHaglund聖なる煙。私はそのコメントを独自の答えにいくつかの説明を入れて提案することをお勧めします...そのようなことが起こっているとは思いもしなかったし、あなたのコメントを見なかったらもっと何時間も尾を追いかけていたでしょう。(この問題にも言及したサーシャとブライアン・ホワイトにも小道具がありますが、あなたのコメントは問題の中心に最も近いようです。)
Beska

回答:


7

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


正しい。system.webServer構成では、WebサイトレベルでhttpCompressionが許可されていません。ルート、つまりapplicationhost.configで同じ設定を行うことができます。
ビベッククンバル

hmm .. docsはweb.configレベルで適用できると言っています-一番下までスクロールします:msdn.microsoft.com/en-us/library/ms690689(v=vs.90).aspxと「構成の場所」を見てください表..ドキュメントの問題ですか?
avs099

@ avs099わかりません。3年前にこの記事を投稿したとき、web.configから始めて、機能していないb / cを投稿したと確信しています。パッチで変更された機能またはドキュメントが間違っている可能性があります。調べるためにテストするのが良いでしょう。
ピーターOehlert

1
ああ-私は明確ではなかったかもしれません-私がドキュメントを読む方法は、httpCompressionはweb.configで使用できると言います-しかし、私はそれを動作させることができなかったので、applicationHost.configファイルも変更しました。ドキュメンテーションは誤解を招くように見えます。SOでの回答をここにリンクします:stackoverflow.com/a/20552186/1246870
avs099

私の答えを参照してください-デフォルトでは、クリーンなIISインストールweb.configは圧縮設定のオーバーライドをオフにします。これが、を変更する必要がある理由ですapplicationHost.config。ただし、圧縮設定を変更する代わりに、代わりにオーバーライドを許可するだけで、ビジネスに戻ることができます。
mcw 14年

3

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

<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

新規インストールから、私のapplicationHost.config(in %windir%\system32\inetsrv\config)には次の設定がありました。

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

...残念ながら、それを圧縮するためのデフォルトのMIMEタイプのセットには、JSONやその他の優れた圧縮候補となるデータタイプが含まれていません。

それに切り替える:

<section name="httpCompression" overrideModeDefault="Allow" />

myのhttpCompressionタグの下のsystem.webServerタグの構成を有効にしますweb.config

httpCompressionセクションを次のapplicationHost.configように設定して、これを確認しました。

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

...そして、実際に圧縮したいすべてのMIMEタイプをweb.config


失敗した要求トレースは、このトラブルシューティングを行うには私にとって非常に有用だった:iis.net/learn/troubleshoot/using-failed-request-tracing/...
MCW

これはIIS8 +ではまったく機能しません。IISの新しいバージョンhttpCompressionで要素をweb.configレベルで機能させる経験はありますか、それとも不可能ですか?ドキュメントは悪夢です-取引がどこで公式であるかを言っているようには見えません。
theyetiman

@theyetiman-申し訳ありませんが、私はIIS8 +をまったく使用していません。幸運を。
-mcw

0

PowerShellから欠落しているMIMEタイプを追加するには、次のコマンドを使用します。

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}
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.