次の方法で共有


IIS 圧縮の使用

作成者: Yanbing Shi

この記事では、IIS 圧縮の使用方法について説明します。

圧縮レベル

HTTP 圧縮では、CPU と帯域幅がトレードオフの関係にあります。 特定の圧縮アルゴリズムで圧縮率を高めると、多くの場合、圧縮速度が遅くなります。その逆も同様です。 圧縮率と速度のバランスは、圧縮レベルによって制御されます。 iiszlib.dlliisbrotli.dll、および gzip.dll の圧縮レベルは、範囲、圧縮率、速度の点でそれぞれ異なります。 次の表に、3 つの圧縮スキーム プロバイダーで許容される圧縮レベルの比較を示します。

圧縮スキーム プロバイダー 圧縮レベル: 圧縮なし 圧縮レベル: 最適な速度 圧縮レベル: 最適な圧縮率
gzip.dll 該当なし 0 10
iiszlib.dll 0 1 9
iisbrotli.dll 該当なし 0 11

Note

iiszlib.dll のレベル 0 では、最適な速度の圧縮が指定されるのではなく、圧縮が指定されません。 <httpCompression> 要素の既定の IIS dynamicCompressionLevel 属性値も 0 です。 そのため、動的に生成されたコンテンツを iiszlib.dll で圧縮するには、dynamicCompressionLevel を 0 より大きな値に明示的に設定する必要があります。

圧縮スキームの優先順位付け

HTTP 圧縮スキーム ネゴシエーション

ユーザー エージェントと IIS サーバー間の圧縮スキーム ネゴシエーションは、Requests for Comment (RFC) 仕様 7231 に準拠しています。

  1. このネゴシエーションは、Accept-Encoding 要求ヘッダーで許容される圧縮スキームの一覧を指定するユーザー エージェントから始まります。

  2. サーバーは、要求の Accept-Encoding ヘッダーを調べ、サーバーがサポートするスキームを選択します。

  3. サーバーは、対応するアルゴリズムを適用して応答本文を圧縮します。

  4. サーバーは、応答を返信するときに、Content-Encoding 応答ヘッダーを追加し、選択した圧縮スキームをそのヘッダー値として指定します。

  5. ユーザー エージェントは、Content-Encoding 応答ヘッダーに示されているスキームを使用して、応答本文を展開し、元のコンテンツをユーザーに表示します。

複数の圧縮スキームの有効化

HTTP 圧縮スキーム ネゴシエーションの背後にある主要な考え方の 1 つは、古いクライアントやサーバーとの下位互換性を保ちながら、新しい圧縮スキームをサポートできるようにすることです。

Brotli 圧縮は、圧縮率がより高く、多くのブラウザーでサポートされていますが、執筆時点では Gzip ほど広く採用されていません。 そのため、最適化の 1 つの方法として、BrotliGzip 圧縮の両方を有効にし、クライアント側のユーザー エージェントでも Brotli をサポートしている場合は Brotli を優先するように設定できます。

IIS 10.0 バージョン 1803 以降

圧縮スキームの優先順位付けは、IIS 10.0 バージョン 1803 以降でサポートされています。 各圧縮スキームの優先順位は、<httpCompression> 要素の <scheme> コレクション内の順序によって決まります。

  • <scheme> コレクションの上に表示される圧縮スキームは、Accept-Encoding 要求ヘッダー値で指定された品質値が同じ場合、後に表示される圧縮スキームよりも優先されます。
  • Accept-Encoding 要求ヘッダー値の品質値が高い圧縮スキームは、<scheme> コレクション内の順序に関係なく、品質値が低い圧縮スキームよりも優先されます。

IIS 圧縮のインストールでは、iisbrotli.dlliiszlib.dll がそれぞれ br および gzip 圧縮スキーム プロバイダーとして登録され、<scheme> コレクションに brgzip の順で配置されます。

<scheme name="br" dll="%ProgramFiles%\IIS\IIS Compression\iisbrotli.dll" />
<scheme name="gzip" dll="%ProgramFiles%\IIS\IIS Compression\iiszlib.dll" />

この設定順序により、Brotli をサポートするほとんどのブラウザーで圧縮スキーム ネゴシエーションに Accept-Encoding: gzip, deflate, br を使用すると、IIS サーバーで Gzip よりも Brotli が優先されます。

Note

通常、Brotli 圧縮をサポートするブラウザーでは、HTTPS を使用する場合、Accept-Encoding ヘッダー値の br のみがアドバタイズされます。

IIS 10.0 バージョン 1803 より前

バージョン 10.0 バージョン 1803 より前の IIS では、複数の圧縮スキームを有効にできますが、Accept-Encoding 要求ヘッダー値のスキーム順序に基づいて圧縮スキームに優先順位が付けられます。

  • 品質値が同じ場合、Accept-Encoding 要求ヘッダー値の先頭 (左から右) に表示される圧縮スキームが、その後に表示されるヘッダー値よりも優先されます。
  • 品質値が高い圧縮スキームは、Accept-Encoding 要求ヘッダー値内の順序に関係なく、品質値が低い圧縮スキームよりも優先されます。

したがって、ブラウザーが要求で Accept-Encoding: gzip, deflate, br ヘッダーを設定している一般的なシナリオでは、IIS は br よりも gzip を常に優先します。

1 つの回避策として、URL Rewrite Module をインストールし、書き換えルールを設定して Accept-Encoding ヘッダー値を変更することができます。 次の設定は、Accept-Encoding ヘッダー値に 0 以外の品質値が指定された文字列 br が見つかる場合、br スキームのみが含まれるようにヘッダー値を書き換える書き換えルールのサンプルです。

<rewrite>
    <allowedServerVariables>
        <add name="HTTP_ACCEPT_ENCODING" />
    </allowedServerVariables>
    <rules>
        <rule name="Prioritize Brotli">
            <match url=".*" />
            <conditions>
                <add input="{HTTP_ACCEPT_ENCODING}" pattern="\bbr(?!;q=0)\b" />
            </conditions>
            <serverVariables>
                <set name="HTTP_ACCEPT_ENCODING" value="br" />
            </serverVariables>
        </rule>
    </rules>
</rewrite>

書き換えルールの設定方法については、「URL Rewrite Module の書き換えルールを作成する」を参照してください。

IIS 圧縮のテスト

IIS 圧縮のテストは、次の方法で実行できます。

  • ブラウザーを開き、IIS サーバーから特定のコンテンツを要求します。
  • ブラウザーの開発者ツールを使用して要求と応答を確認します。

F12 ツールからの応答ヘッダー

静的コンテンツ圧縮の IIS 圧縮をテストするには:

  • 要求されたリソースの MIME の種類が、<httpCompression> 要素の <staticTypes> コレクションで有効になっていることを確認します。
  • 要求されたリソース サイズが、<httpCompression> 要素で指定された minFileSizeForComp より大きいことを確認します。
  • 要求された URL の "ヒット頻度" しきい値に達していることを確認します。 このしきい値は、<serverRuntime> 要素の frequentHitThreshold 属性と frequentHitTimePeriod 属性によって指定されます。 または、<httpCompression> 要素の staticCompressionIgnoreHitFrequency 属性の値を true として設定し、テスト目的でのみ "ヒット頻度" のチェックを無効にします。

動的コンテンツ圧縮の IIS 圧縮をテストするには:

  • 要求されたリソースの MIME の種類が、<httpCompression> 要素の <dynamicTypes> コレクションで有効になっていることを確認します。