web-dev-qa-db-ja.com

IIS7でMVC3を使用するときにgzip圧縮を有効にするにはどうすればよいですか?

MVC 3でgzip圧縮を有効にする方法を知っている人はいますか? IIS7を使用しています。

Google Chrome Auditの結果:

  1. Gzip圧縮を有効にします(4)
  2. 以下のリソースをgzipで圧縮すると、転送サイズが約3分の2(約92.23KB)削減される可能性があります。
  3. / mydomain /で〜1.53KB節約できます
  4. jquery-1.4.4.min.jsは〜51.35KBを節約できます
  5. Cufon.jsは〜11.89KBを節約できます
  6. Futura.jsは〜27.46KBを節約できます
97
imarkic84

web.configファイルを使用して、次のように圧縮を構成できます。

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

この構成要素のドキュメントは、 iis.net/ConfigReference にあります。これは次と同等です:

  1. インターネットインフォメーションサービス(IISマネージャー)を開く
  2. 変更する仮想ディレクトリに到達するまで、左側のツリービューをナビゲートします。
  3. 適切な仮想ディレクトリを選択して、右側のペインのタイトルがその仮想ディレクトリの名前になるようにします。
  4. 右側のペインの「IIS」の下で「圧縮」を選択する
  5. 両方のオプションにチェックマークを付け、右端の「アクション」の下にある「適用」を選択します。

注:(コメントで指摘されているように)Http Dynamic Compressionがインストールされていることを確認する必要があります。そうでない場合、doDynamicCompression="true"を設定しても効果がありません。これを行う最も簡単な方法は次のとおりです。

  1. 「スタート」>「optionalfeatures」と入力します(これは[Windowsの機能の有効化または無効化]ウィンドウに到達する最も簡単な方法です)
  2. [Windowsの機能]ツリービューで[インターネットインフォメーションサービス]> [World Wide Webサービス]> [パフォーマンス機能]に移動します。
  3. 「動的コンテンツ圧縮」がチェックされていることを確認します
  4. [OK]をクリックして、Windowsがコンポーネントをインストールするのを待ちます
138
Rob

むしろそうすれば、コードでこれを行うことができます。すべてのコントロールが継承するベースコントローラーを作成し、以下のこの属性で装飾します。

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}
31
NetProvoke

圧縮は、サーバーレベルで有効/無効になります。 iis管理コンソールのIIS圧縮モジュールを参照してください。

Microsoftサイトからの IISの手順 です。

12
nakhli