web-dev-qa-db-ja.com

IIS)でBrotli圧縮を有効にする

私のチームは現在、VPSにBrotli圧縮をインストールしようとしています:ここからダウンロードできる64ビットモジュールを使用して、IIS8.5を搭載したWindows Server 2012 R2: https://www.iispeed.com/pagespeed/products/iisbrotli

しかし、私たちが何をしようとしても、次の下にhttpsドメイン名を入力すると: https://tools.keycdn.com/brotli-test メッセージが表示されます

負! www.zorgbeurs.nlはBrotli圧縮をサポートしていません。

IISでは、これら2つのモジュールはそのサイトでアクティブです:
DynamicCompressionModule
StaticCompressionModule

これまでに試したこと:

これをapplicationHost.Configファイルに追加しました:

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
        <scheme name="br" dll="C:\inetpub\iisbrotli64.dll" />
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
        <dynamicTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/x-javascript" 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/x-javascript" enabled="true" />
            <add mimeType="application/javascript" enabled="true" />
            <add mimeType="application/atom+xml" enabled="true" />
            <add mimeType="application/xaml+xml" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </staticTypes>                             
    </httpCompression>

Gzip行なしで試してみました<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />

IISを停止して開始しました。

キャッシュが問題であるかどうかを確認したかったので、フォルダー内のファイルをクリアしました。
"C:\ Windows\Temp"、 "C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root"、 "%SystemDrive%\ inetpub\temp\IIS Temporary圧縮ファイル」をクリックしてから、Webサーバーを再起動しました。

<system.webServer>セクションにこの行がある場合とない場合のサイトのweb.configで:

<urlCompression doStaticCompression="true" doDynamicCompression="true" />

それでも私はこれをChrome zorgbeurs.nlへの200リクエストの開発コンソールで見ます:

応答ヘッダー

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Origin:*
Cache-Control:private
Content-Encoding:gzip
Content-Length:14252
Content-Type:text/html; charset = utf-8
日付:2016年12月30日金曜日19:01:48 GMT
サーバー:Microsoft-IIS/8.5
Set-Cookie:showcookiebar = false;パス= /
Vary:Accept-エンコーディング
X-AspNet-バージョン:4.0.30319
X-Powered-By:ASP.NET

設定が完全​​に無視されているかのようです。

他に何を試すことができますか?

1
Flo

参照したBrotliモジュールには有料ライセンスが必要なようですので、試していませんが、私自身の IIS用のオープンソースBrotliプラグイン で同様の問題が発生しました。

現在のブラウザは、Accept-Encodingヘッダーのgzipdeflateの後にBrotliサポートをアドバタイズします。一般的なヘッダーは次のようになります:Accept-Encoding: gzip, deflate, br

HTTP RFC は、同じ優先度を持つ多くのAccept-Encoding値から選択する方法に関する具体的なガイダンスを提供しないため、それらのクライアントにbrコンテンツを返すことは許容されます。ただし、IISは、構成された圧縮スキームの1つに一致する最初の圧縮スキーム(左から右)を選択します。つまり、brのいずれかが選択されない場合はgzipを選択しません。 ] _またはdeflate圧縮も有効になります。

明らかな解決策は、サーバーでgzipdeflateを無効にして、brが唯一の一致になるようにすることです。ただし、インターネットユーザーの約20〜25%(2018年初頭現在)はまだBrotliをサポートしていない古いWebブラウザーを使用しているため、サーバーでgzipを有効にして、それらの圧縮をサポートすることをお勧めします。クライアント、少なくともしばらくの間。

したがって、両方(または3つすべて)のスキームを有効のままにしておきたい場合は、何らかのアクションを実行して、許容できる場合にIIS brを選択するように強制する必要があります。これを実現するには、リクエストがIISパイプラインに入るときにAccept-Encodingヘッダー値を変更できます。 IISURL書き換えモジュール を使用すると簡単に変更できます。

Accept-EncodingヘッダーはIISパイプラインのHTTP_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>

上記のルールは、;q=0ヘッダーで文字列br(Wordの境界で囲まれ、直後にAccept-Encodingが続くわけではありません)を検索し、単純なbr、IIS 1つの選択肢のみを与える。

デフォルトのURL書き換え構成では、HTTP_ACCEPT_ENCODING変数を変更できないことに注意してください。 allowedServerVariables要素はその制限を上書きするため、applicationHost.configで構成する必要があります。書き換えルールは、構成階層の任意のレベルで定義できますが、グローバルにすることはおそらく理にかなっています。

5
saucecontrol
2
Yanbing Shi

https://github.com/saucecontrol/BrotliIIS 問題の解決に役立つ可能性があります

0
Rafs

ドキュメント によると、8.5以降のすべてのバージョンのIISは、サーバーレベルで圧縮スキームの設定を構成できなくなりました。ブラウザーはサーバーに「要求」する必要があるためです。どの圧縮スキームがサポートされており、すべてのブラウザーでgzipの背後にBrotliがある場合、IIS 8.5以降では誰もBrotliを使用できなくなります。:-(

0
covfefe