私のチームは現在、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
設定が完全に無視されているかのようです。
他に何を試すことができますか?
参照したBrotliモジュールには有料ライセンスが必要なようですので、試していませんが、私自身の IIS用のオープンソースBrotliプラグイン で同様の問題が発生しました。
現在のブラウザは、Accept-Encoding
ヘッダーのgzip
とdeflate
の後にBrotliサポートをアドバタイズします。一般的なヘッダーは次のようになります:Accept-Encoding: gzip, deflate, br
。
HTTP RFC は、同じ優先度を持つ多くのAccept-Encoding
値から選択する方法に関する具体的なガイダンスを提供しないため、それらのクライアントにbr
コンテンツを返すことは許容されます。ただし、IISは、構成された圧縮スキームの1つに一致する最初の圧縮スキーム(左から右)を選択します。つまり、br
のいずれかが選択されない場合はgzip
を選択しません。 ] _またはdeflate
圧縮も有効になります。
明らかな解決策は、サーバーでgzip
とdeflate
を無効にして、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
で構成する必要があります。書き換えルールは、構成階層の任意のレベルで定義できますが、グローバルにすることはおそらく理にかなっています。
https://github.com/saucecontrol/BrotliIIS 問題の解決に役立つ可能性があります
ドキュメント によると、8.5以降のすべてのバージョンのIISは、サーバーレベルで圧縮スキームの設定を構成できなくなりました。ブラウザーはサーバーに「要求」する必要があるためです。どの圧縮スキームがサポートされており、すべてのブラウザーでgzipの背後にBrotliがある場合、IIS 8.5以降では誰もBrotliを使用できなくなります。:-(