スキーム <scheme>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<httpCompression> 要素の <scheme> 要素は、インターネット インフォメーション サービス (IIS) 7.0 での GNU zip (Gzip) 圧縮スキームと Deflate 圧縮スキームに関する次の設定を指定します。

  • name 属性および dll 属性は、それぞれ圧縮スキームの名前とプロバイダー DLL を指定します。IIS 7.0 では、Gzip と Deflate の 2 つの圧縮をサポートしており、いずれの圧縮スキームとも現在 %windir%\system32\inetsrv\gzip.dll に実装されています。

  • doStaticCompression 属性は、name 属性によって指定されている圧縮スキームにおいて、静的な圧縮が有効であるかどうかを指定します。doStaticCompressiontrue に設定すると、クライアントからの要求があったときに静的コンテンツが圧縮されることが指定されます。静的な圧縮が有効になっている場合、静的コンテンツの要求に "Accept-Encoding: gzip" または "Accept-Encoding: deflate" ヘッダーが含まれていると、そのコンテンツは圧縮されます (ヘッダーで指定されている圧縮スキームが IIS で有効になっている場合のみ)。要求にこのヘッダーが含まれていないか、ヘッダーに指定されている圧縮スキームが IIS で有効になっていない場合、コンテンツは圧縮されません。

    応答を圧縮すると判断した場合、IIS は <httpCompression> 要素の directory 属性によって指定されている圧縮ディレクトリを確認します。このディレクトリに最新の圧縮バージョンの静的ファイルが見つかった場合は、それがクライアント ブラウザーに送信されます。最新の圧縮バージョンのファイルが見つからず、<urlCompression> 要素の dynamicCompressionBeforeCache 属性によってオンデマンド圧縮が有効になっている場合、IIS は要求されたファイルを圧縮されていない形式で送信し、そのファイルをバックグラウンドの圧縮キューに追加します。

  • doDynamicCompression 属性は、name 属性によって指定されている圧縮スキームにおいて、動的な圧縮が有効であるかどうかを指定します。doDynamicCompressiontrue に設定すると、クライアントからの要求があったときに動的コンテンツが圧縮されることが指定されます。動的な圧縮が有効になっている場合、動的コンテンツの要求に "Accept-Encoding: gzip" または "Accept-Encoding: deflate" ヘッダーが含まれていると、そのコンテンツは圧縮されます (ヘッダーで指定されている圧縮スキームが IIS で有効になっている場合のみ)。要求にこのヘッダーが含まれていないか、ヘッダーに指定されている圧縮スキームが IIS で有効になっていない場合、コンテンツは圧縮されません。

    : 動的コンテンツは、定義上、常に変化しているので、IIS では動的コンテンツの圧縮バージョンはキャッシュされません。動的な圧縮はかなりの CPU 時間とメモリ リソースを消費するので、ネットワーク接続が低速で、CPU 時間に余裕のあるサーバーのみで使用してください。

  • dynamicCompressionLevel 属性と staticCompressionLevel 属性は、IIS が動的コンテンツまたは静的コンテンツをそれぞれ圧縮するときの圧縮スキームの圧縮レベルを指定します。低い圧縮レベルは若干大きい圧縮ファイルを生成しますが、CPU とメモリのリソースに対する全体的な影響が少なくなります。高い圧縮レベルは生成される圧縮ファイルが一般的に小さくなりますが、CPU とメモリをより多く使用します。

: IIS 7.0 では、既定で Gzip 圧縮スキームのみが有効になっています。Deflate 圧縮スキームをプログラムによって有効にするには、このドキュメントの「サンプル コード」セクションを参照してください。

互換性

  IIS 7.0 IIS 6.0
説明 <httpCompression><scheme> は IIS 7.0 で新たに導入された要素です。 <scheme> 要素は、IIS 6.0 の次のメタベース プロパティに代わるものです。

HcCompressionDll
HcDoDynamicCompression
HcDoStaticCompression
HcDynamicCompressionLevel

セットアップ

HTTP 圧縮は、通常、IIS 7.0 の既定のインストールに含まれていますが、静的圧縮のみが既定でインストールされます。静的圧縮または動的圧縮をインストールするには、次の手順を実行します。

Windows Server 2008

  1. タスク バーの [スタート] ボタンをクリックし、[管理ツール] をポイントして [サーバー マネージャー] をクリックします。

  2. [サーバー マネージャー] のツリー表示で、[役割] を展開して [Web サーバー (IIS)] をクリックします。

  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールして [役割サービスの追加] をクリックします。

  4. 役割サービスの追加ウィザードの [役割サービスの選択] ページで、動的圧縮をインストールする場合は [動的なコンテンツの圧縮] を、静的圧縮をインストールする場合は [静的なコンテンツの圧縮] を選択して、[次へ] をクリックします。

    拡大

  5. [インストール オプションの確認] ページで [インストール] をクリックします。

  6. [結果] ページで [閉じる] をクリックします。

Windows Vista

  1. タスク バーの [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。

  2. [コントロール パネル][プログラムと機能] をクリックして、[Windows の機能の有効化または無効化] をクリックします。

  3. [Internet Information Services][World Wide Web サービス][性能機能] の順に展開します。

  4. 動的圧縮をインストールする場合は [HTTP 動的圧縮] を、静的圧縮をインストールする場合は [静的なコンテンツの圧縮] を選択します。

    拡大

  5. [OK] をクリックします。

方法

IIS 7.0 には、圧縮スキームを設定するためのユーザー インターフェイスはありません。圧縮スキームをプログラムによって設定する方法の例については、このドキュメントの「サンプル コード」セクションを参照してください。

構成

属性

属性 説明
dll 必須の string 属性。

圧縮スキームに関連付けられている圧縮 DLL の完全修飾ファイル システム パスおよびファイル名を指定します。この属性の変更を有効にするには、World Wide Web 発行サービス (WWW サービス) を再起動する必要があります。
doDynamicCompression オプションの Boolean 属性。

Active Server Pages (ASP) および ISAPI 拡張機能のスクリプトなどの動的コンテンツに対する要求の応答を圧縮するかどうかを指定します。この属性は継承できないので、name 属性が Gzip に設定されている場合には、グローバル レベル (<httpCompression>) と個々のスキームのレベルの両方で、この属性を true に設定する必要があります。この値を個々の圧縮スキームのレベルで変更した場合は、WWW サービスを再起動して変更を有効にする必要があります。

既定値は true です。
doStaticCompression オプションの Boolean 属性。

IIS が静的コンテキストに対する要求の応答を圧縮するかどうかを指定します。この属性は継承できないので、name 属性が Gzip に設定されている場合には、グローバル レベル (<httpCompression>) と個々のスキームのレベルの両方で、この属性を true に設定する必要があります。この値を個々の圧縮スキームのレベルで変更した場合は、WWW サービスを再起動して変更を有効にする必要があります。

: 静的な圧縮ストアは、NTFS 形式でフォーマットされたディスク パーティションまたはリモート共有に配置する必要があります。ファイル ストアが NTFS 形式でない場合、静的な圧縮は無効になります。セキュリティ上の理由から、圧縮された応答が FAT キャッシュ ストアから提供されることはありません。

既定値は true です。
dynamicCompressionLevel オプションの uint 属性。

動的コンテンツが圧縮される際の、圧縮スキームの圧縮レベルを指定します。レベルの範囲は 0 (最低の圧縮レベルと最低の CPU 使用率) から 10 (最高の圧縮レベルと最高の CPU 使用率) までです。この属性の変更を有効にするには、WWW サービスを再起動する必要があります。

: 動的な圧縮はかなりの CPU 時間とメモリ リソースを消費するので、ネットワーク接続が低速で、CPU 時間に余裕のあるサーバーのみで使用してください。圧縮された静的な応答はキャッシュできるので、CPU リソースに対する影響は、動的な応答のようには大きくありません。

既定値は 0 です。
name 必須の string 属性。

圧縮スキームの名前を指定します。たとえば、Gzip または Deflate と指定します。
staticCompressionLevel オプションの uint 属性。

静的コンテンツが圧縮される際の、圧縮スキームの圧縮レベルを指定します。レベルの範囲は 0 (最低の圧縮レベルと最低の CPU 使用率) から 10 (最高の圧縮レベルと最高の CPU 使用率) までです。この属性の変更を有効にするには、WWW サービスを再起動する必要があります。

既定値は 7 です。

子要素

要素 説明
remove オプションの要素。

HTTP 圧縮スキームのコレクションから HTTP 圧縮スキームの 1 つの参照を削除します。
clear オプションの要素。

HTTP 圧縮スキームのコレクションから、すべての HTTP 圧縮スキームの参照を削除します。

構成サンプル

IIS 7.0 の ApplicationHost.config ファイルには、次の既定の <httpCompression> 要素が構成されています。この構成セクションは、<clear> 要素を使用している場合を除き、既定の構成設定を継承します。

<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>

サンプル コード

次のコード サンプルは、deflate 圧縮スキームを IIS 7.0 に追加します。

AppCmd.exe

appcmd.exe set config -section:system.webServer/httpCompression /+"[name='deflate',doStaticCompression='True',doDynamicCompression='True',dll='%Windir%\system32\inetsrv\gzip.dll']" /commit:apphost

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection httpCompressionSection = config.GetSection("system.webServer/httpCompression");
         ConfigurationElementCollection httpCompressionCollection = httpCompressionSection.GetCollection();

         ConfigurationElement schemeElement = httpCompressionCollection.CreateElement("scheme");
         schemeElement["name"] = @"deflate";
         schemeElement["doStaticCompression"] = true;
         schemeElement["doDynamicCompression"] = true;
         schemeElement["dll"] = @"%Windir%\system32\inetsrv\gzip.dll";
         httpCompressionCollection.Add(schemeElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim httpCompressionSection As ConfigurationSection = config.GetSection("system.webServer/httpCompression")
      Dim httpCompressionCollection As ConfigurationElementCollection = httpCompressionSection.GetCollection

      Dim schemeElement As ConfigurationElement = httpCompressionCollection.CreateElement("scheme")
      schemeElement("name") = "deflate"
      schemeElement("doStaticCompression") = True
      schemeElement("doDynamicCompression") = True
      schemeElement("dll") = "%Windir%\system32\inetsrv\gzip.dll"
      httpCompressionCollection.Add(schemeElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var httpCompressionSection = adminManager.GetAdminSection("system.webServer/httpCompression", "MACHINE/WEBROOT/APPHOST");
var httpCompressionCollection = httpCompressionSection.Collection;

var schemeElement = httpCompressionCollection.CreateNewElement("scheme");
schemeElement.Properties.Item("name").Value = "deflate";
schemeElement.Properties.Item("doStaticCompression").Value = true;
schemeElement.Properties.Item("doDynamicCompression").Value = true;
schemeElement.Properties.Item("dll").Value = "%Windir%\\system32\\inetsrv\\gzip.dll";
httpCompressionCollection.AddElement(schemeElement);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set httpCompressionSection = adminManager.GetAdminSection("system.webServer/httpCompression", "MACHINE/WEBROOT/APPHOST")
Set httpCompressionCollection = httpCompressionSection.Collection

Set schemeElement = httpCompressionCollection.CreateNewElement("scheme")
schemeElement.Properties.Item("name").Value = "deflate"
schemeElement.Properties.Item("doStaticCompression").Value = True
schemeElement.Properties.Item("doDynamicCompression").Value = True
schemeElement.Properties.Item("dll").Value = "%Windir%\system32\inetsrv\gzip.dll"
httpCompressionCollection.AddElement(schemeElement)

adminManager.CommitChanges()