この記事では、IIS 圧縮の使用方法の概要について説明します。
圧縮レベル
HTTP 圧縮は、帯域幅に対する CPU のトレードオフです。 特定の圧縮アルゴリズムでは、より高い圧縮率を達成するには、通常、圧縮速度が遅くなります。その逆も同様です。 圧縮率と速度のバランスは、圧縮レベルによって制御されます。 iiszlib.dll、 iisbrotli.dll、およびgzip.dll の圧縮レベルは、範囲、圧縮率、速度の点で互いに一致しません。 次の表に、3 つの圧縮スキーム プロバイダーの許可される圧縮レベルの比較を示します。
| 圧縮スキーム プロバイダー | 圧縮レベル: 圧縮なし | 圧縮レベル: 最適な速度 | 圧縮レベル: 最適な圧縮率 |
|---|---|---|---|
| gzip.dll | N/A | 0 | 10 |
| iiszlib.dll | 0 | 1 | 9 |
| iisbrotli.dll | N/A | 0 | 11 |
注
レベル 0 の iiszlib.dll では、最適な速度を高めるための圧縮ではなく、圧縮が行われません。
要素の既定の IIS <httpCompression> 属性値も 0 です。 したがって、動的に生成されたコンテンツをiiszlib.dllで圧縮できるようにするには、 dynamicCompressionLevel を 0 より上に明示的に設定する必要があります。
圧縮スキームの優先順位付け
HTTP 圧縮スキーム ネゴシエーション
ユーザー エージェントと IIS サーバー間の圧縮スキーム ネゴシエーションは、 コメント要求 (RFC) 仕様 7231 に準拠しています。
ネゴシエーションは、 Accept-Encoding 要求ヘッダーで許容される圧縮スキームの一覧を指定するユーザー エージェントから始まります。
サーバーは要求の Accept-Encoding ヘッダーを調べ、サーバーがサポートするスキームを選択します。
サーバーは、対応するアルゴリズムを適用して応答本文を圧縮します。
サーバーが応答を返送すると、選択した圧縮スキームをヘッダー値として含む Content-Encoding 応答ヘッダーが追加されます。
ユーザー エージェントは 、Content-Encoding 応答ヘッダーに示されているスキームを使用して応答本文を展開し、元のコンテンツをユーザーにレンダリングします。
複数の圧縮スキームを有効にする
HTTP 圧縮スキーム ネゴシエーションの背後にある重要なアイデアの 1 つは、古いクライアントまたはサーバーとの下位互換性を維持しながら、新しい圧縮スキームをサポートする可能性です。
Brotli圧縮は、より高い圧縮率の利点を提供し、多くのブラウザでサポートされていますが、執筆時点ではGzipほど広く採用されていません。 したがって、可能な最適化の 1 つは 、Brotli と Gzip の両方の圧縮を有効にすることですが、クライアント側のユーザー エージェントでもサポートされている場合は Brotli に優先順位を付けます。
IIS 10.0 バージョン 1803 以降
圧縮スキームの優先順位付けは、IIS 10.0 バージョン 1803 以降でサポートされています。
各圧縮スキームの優先順位は、<scheme>要素の<httpCompression> コレクション内の順序によって決まります。
-
<scheme>コレクションの上部に表示される圧縮スキームは、Accept-Encoding 要求ヘッダー値で指定された品質値が同じ場合、後に表示される圧縮スキームよりも優先されます。 -
Accept-Encoding 要求ヘッダー値の品質値が高い圧縮スキームは、
<scheme>コレクション内の順序に関係なく、品質値の低い値よりも優先されます。
IIS Compression のインストールでは、br および gzip 圧縮スキーム プロバイダーとして iisbrotli.dll と iiszlib.dll が登録され、 コレクション内の gzip の前に br が配置されます。<scheme>
<scheme name="br" dll="%ProgramFiles%\IIS\IIS Compression\iisbrotli.dll" />
<scheme name="gzip" dll="%ProgramFiles%\IIS\IIS Compression\iiszlib.dll" />
このような構成順序により、Brotli をサポートするほとんどのブラウザーが圧縮スキーム ネゴシエーションにを使用する場合、IIS サーバーは Gzip よりも Accept-Encoding: gzip, deflate, br に優先順位を付けられます。
注
通常、Brotli 圧縮をサポートするブラウザーでは、HTTPS を使用する場合にのみ、Accept-Encoding ヘッダー値で br をアドバタイズします。
IIS 10.0 バージョン 1803 より前
バージョン 10.0 バージョン 1803 より前の IIS では複数の圧縮スキームを有効にできますが、 Accept-Encoding 要求ヘッダー値に表示されるスキームの順序に基づいて、圧縮スキームに優先順位を付けます。
- Accept-Encoding 要求ヘッダー値の先頭 (左から右) に表示される圧縮スキームは、品質値が同じ場合、後に表示される圧縮スキームよりも優先されます。
- 品質値が高い圧縮スキームは、 Accept-Encoding 要求ヘッダー値の順序に関係なく、品質値の低い圧縮スキームよりも優先されます。
その結果、IIS は常にブラウザーが要求でヘッダー設定する一般的なシナリオに対して、br よりも Accept-Encoding: gzip, deflate, br に優先順位を付けます。
考えられる回避策は、 URL 書き換えモジュール をインストールし、 Accept-Encoding ヘッダー値を変更するように書き換えルールを構成することです。 次の構成は、0 以外の品質値を持つヘッダー値で文字列 br が検出された場合にのみ br スキームを含むように Accept-Encoding ヘッダー値を書き換えるサンプル書き換え規則を示しています。
<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 書き換えモジュールの書き換えルールの作成に関するページを参照してください。
IIS 圧縮のテスト
IIS 圧縮のテストは、次の方法で実行できます。
- ブラウザーを開き、IIS サーバーから特定のコンテンツを要求する。
- ブラウザーの開発者ツールを使用して要求と応答を確認します。
IIS 圧縮の静的コンテンツ圧縮をテストするには:
- 要求されたリソースの MIME の種類が、
<staticTypes>要素の<httpCompression>コレクションで有効になっていることを確認します。 - 要求されたリソース サイズが、
minFileSizeForComp要素で指定された<httpCompression>より大きいことを確認します。 - 要求された URL の "ヒット頻度" しきい値に達していることを確認します。 しきい値は、
frequentHitThreshold要素のfrequentHitTimePeriod属性と<serverRuntime>属性によって指定されます。 または、staticCompressionIgnoreHitFrequency要素の<httpCompression>属性の値をtrueとして設定し、テスト目的でのみ "ヒット頻度" チェックを無効にします。
IIS 圧縮で動的コンテンツ圧縮をテストするには:
- 要求されたリソースの MIME の種類が、
<dynamicTypes>要素の<httpCompression>コレクションで有効になっていることを確認します。