iis 7 の動的コンテンツ圧縮を有効にする方法は?

iis 7 の動的コンテンツ圧縮を有効にする方法は?

IIS 7 で動的コンテンツ圧縮を有効にしましたが、Fiddler では動的ページが依然として content-encoding: 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: chunked」は、サーバーの応答には決して現れません。「Chunked」は、HTTP 仕様の「Transfer-Encoding」とは完全に別の部分です。「Transfer-Encoding: chunked」に加えて、「Content-Encoding: 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

調べてみるとこれこれは、テンプレートから HTML を生成するときに、Coldfusion 側でも圧縮を有効にする必要があることを示しています。正確なソースは見つかりませんが、私の記憶が正しければ、動的圧縮は ASP.Net と PHP を対象としていますが、後者の場合は PHP フレームワークでも有効にする必要があります。

したがって、圧縮が行われない理由は、ジェネレーター側 (この場合は Coldfusion) で圧縮を有効にする必要があるためだと推測します。

答え4

applicationHost.config を編集するにはメモ帳を使用してください。Notepad++ (および Visual Studio 2010 エディター!!) で行った変更が IIS によって適用されないことに気づくまでに、数時間を無駄にしました。

dynamicTypes/staticTypes コレクションに追加の mimeType を追加する別の方法は、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 で再度開いた後でも、ファイルの独自のバージョン (メモ帳に表示されるものとは異なる) が表示されます。

関連情報