しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Brotli が使える IIS Compression モジュールが正式リリースされていた

ちょっと前に書いた Microsoft 公式の Brotli が使えるモジュールですが、いつの間にかにちゃんとインストーラとドキュメントが公開されていました。これで 1803 以降の IIS では簡単に Brotli が使えます。

最近の IIS に対する動きは、割と歓迎したい流れではあります。

インストーラは以下のドキュメント内で x86 / x64 の両方が公開されています。

ダウンロードしたインストーラは、よく見る IIS Native Module で使われているものです。サイレントでインストールも出来るので、スクリプトで自動実行も出来ますね。

f:id:shiba-yan:20180614021124p:plain

インストール自体は一瞬で終わります。その後 IIS Manager で設定を確認すると、ちゃんと IIS Compression の gzip と br が追加されていることが確認できます。

自分でビルドして設定する必要が無くなったので、格段に使いやすくなりました。これは嬉しい。

f:id:shiba-yan:20180614021149p:plain

インストール後の使い方などは別のドキュメントにまとまっています。といっても、最新の 1803 以降の IIS では複数の scheme に対応しているので、特にやることはないです。

それ以前の IIS の場合は URL Rewrite を使って br を優先的に扱う必要があります。

ちなみに App Service でも Site Extension を使うことで良い感じに Brotli を有効化することが出来ます。dll の条件を調べるのが面倒だったので、前回自分でビルドした dll を使って試しました。

XDT は以下のように用意しました。これを見て分かる人だけが試してもらえれば良いと思います。

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <httpCompression>
      <scheme name="br" dll="%XDT_EXTENSIONPATH%\iisbrotli.dll" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" />
    </httpCompression>
    <rewrite>
      <allowedServerVariables>
        <add name="HTTP_ACCEPT_ENCODING" xdt:Transform="InsertIfMissing" />
      </allowedServerVariables>
      <rules>
        <rule name="Prioritize Brotli" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)">
          <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>
  </system.webServer>
</configuration>

基本的にはドキュメントに書いてあった URL Rewrite 定義をそのまま持ってきただけです。

実際に App Service に Site Extension として追加すると、ちゃんと Brotli が有効になりました。

f:id:shiba-yan:20180614023912p:plain

サイトレベルでの対応なので、アプリケーション側の設定を弄る必要はないはずです。

同じような方法で IIS CORS Module を App Service に追加することも出来ると思いますが、この手のライブラリは配布方法が地味に面倒なので、最初からインストールしておいてもらいたい気持ちです。