IIS7 gzipを有効にする


229

IIS7がjsやcssなどの静的ファイルをgzipできるようにするにはどうすればよいですか?また、クライアントに送信する前にIIS7が実際にそれらをgzipしているかどうかをテストするにはどうすればよいですか?

回答:


243

構成

Web.configファイルでGZIP圧縮を完全に有効にすることができます。これは、共有ホスティングを使用していて、IISを直接構成できない場合、またはターゲットとするすべての環境間で構成を実行したい場合に特に便利です。

<system.webServer>
  <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 doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

テスト中

圧縮が機能しているかどうかをテストするには、ChromeまたはFirefoxのFirebugの開発者ツールを使用して、HTTP応答ヘッダーが設定されていることを確認します。

Content-Encoding: gzip

応答コードが304(Not Modified)の場合、このヘッダーは存在しないことに注意してください。その場合は、完全に更新し(ShiftキーまたはControlキーを押しながら更新ボタンを押す)、もう一度確認してください。


@DenNukem、すみません、よくわかりません。これはIIS7でのみテストしました。他にコメントしたい人は?
Drew Noakes、2011

21
注意-applicationhost.configのhttpCompressionセクションがロック解除されている場合にのみ機能します。デフォルトでは、セクションは変更のためにロックされているため、web.configでのオーバーライドは機能しません。これで数時間を無駄にしました。stackoverflow.com/a/2894695/245460、以下のコメントの記事を参照してください。
Karel Kral

Webロールのインストール済み機能、およびMSDNからの確認:「MIMEタイプにワイルドカードエントリを追加することもできます。ただし、MIMEタイプはWebサーバーレベルのみに設定できます。たとえば、静的圧縮を有効にするには、デフォルトWebサイトのすべてのMIMEタイプ。最初にサーバーレベルのMIMEタイプのワイルドカードエントリを追加してから、デフォルトWebサイトの静的圧縮を有効にします。」
ルークPuplett 2013年

12
動的コンテンツ圧縮モジュールがサーバーにインストールされていない限り、動的圧縮も機能しません(Webプラットフォームインストーラーを介して取得可能)。Css / Jsバンドルを使用している場合、これが必要になります。
マーク

CSSのみが圧縮されますが、圧縮され.jsません。また、を追加してみましたapplication/x-javascript。tomcatと一緒に使用することで、directoryパラメーターが削除されました。
coding_idiot

58

Windows機能のコントロールパネルで機能を有効にする必要があります。

IIS機能のスクリーンショット


16
Windows Server 2008 R2では、これは[サーバーマネージャー]> [役割]> [Webサーバー(IIS)]にあります。「役割」セクションの「役割サービスの追加」をクリックします。「動的コンテンツ圧縮」は「パフォーマンス」ヘッダーの下にリストされています。
ジョナサンリトル

37

HttpModuleのグローバルGzip

最終的なIISインスタンス(共有ホスティング)にアクセスできない場合は、このコードをすべてのHttpApplication.Begin_Requestイベントに追加するHttpModuleを作成できます。

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

テスト中

称賛、テストなしで解決策はありません。私は、Firefoxプラグイン「Liveheaders」を使用したいのですが、圧縮、ファイルサイズ(サーバー上のファイルサイズと比較できます)を含む、ブラウザーとサーバー間のすべてのhttpメッセージに関するすべての情報を表示します。


3
私は共有ホスティングを使用しており、GZIP出力圧縮を有効にするためにコードを記述する必要はありませんでした。Web.configだけでも可能でした。私の答えを参照してください。stackoverflow.com/questions/702124/enable-iis7-gzip/...
ドリューNoakes

2
圧縮したい1つのaspxページの先頭に最初の3行を配置しました。ありがとうございました!これは他のどのアプローチよりもはるかに手間がかからず、IIS 6で動作します。
DenNukem 2011

1
これは絶対に行う方法です。
マシュージェームスデイビス


2

Charlieが述べたように、私はWindowsの機能に機能を追加するだけで済みました。Windows10またはサーバー2012+で機能が見つからない場合は、以下のようにしてください。私は少し苦労しました

ウインドウズ10

ここに画像の説明を入力してください

Windowsサーバー2012 R2

ここに画像の説明を入力してください

ウィンドウサーバー2016

ここに画像の説明を入力してください


1

YSlowをFirebugで使用してページのパフォーマンスを分析する場合、YSlowはページ上のどのアーティファクトがgzipされていないかを確実に通知します。





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