Twitter を見てると IIS 向けに Microsoft 公式で Brotli が使えるモジュールが GitHub でリリースされていたので、さっそく飛びついてみました。
まだソースコードでの公開なのでビルドする必要がありますが、インストーラーで配布されるでしょう。
Brotli and Zlib compression schemes for IIS coming soon. Follow https://t.co/SYezEnbrkI for more updates
— Sourabh Shirhatti (@sshirhatti) 2018年4月27日
IIS の Brotli モジュールは有償配布だったり、コミュニティベースでビルドが必要なものだったりと散乱してましたが、やっと Microsoft が動いたという点は評価したいところです。
とはいえ、圧縮モジュールをインストールしても IIS はブラウザが送ってくる Accept-Encoding の順番を優先する挙動になっているので、大体最後になっている Brotli は使われないという問題がありました。
なので中の人に聞いてみたら、良い回答が返ってきました。
Unfortunately no 🙁. A new compression scheme cannot change existing IIS behavior. We've made a change in Windows Server Version 1803 where the order of schemes in the httpCompression collection matters, but for existing OSes the URL Rewrite rule is still probably your best bet.
— Sourabh Shirhatti (@sshirhatti) 2018年4月28日
この辺りが改善されないと Brotli を使えないと思ってましたが、どうやら Windows Server Version 1803 で改善されたようです。具体的には scheme に書いた順番が優先されるようになったみたいですね。
さて、実際にモジュールをビルドして試します。README 通りに build.cmd を実行すると Windows 8.1 SDK が要求されたので、Visual Studio で開いてターゲットを変えた上でビルドしました。
bin ディレクトリに iiszlib.dll と iisbrotli.dll が出来ているので、それを inetsrv にコピーして httpCompression に登録します。Windows Server Version 1803 を用意するのが面倒だったので、リリースされたばかりの Windows 10 Version 1803 を使いました。
このあたりは IIS Manager で行うより applicationHost.config を弄ったほうが早いかもしれません。
この時に br が gzip より上になるように書く必要があります。
あとは IIS を再起動して、適当に HTTPS でページにアクセスすると Brotli が使われていることが確認できるはずです。インストーラーで提供されれば、一瞬で環境が整うはずです。
ちなみに br と gzip の順番を入れ替えると、ちゃんと gzip が使われるようになりました。
インストールするのすら面倒な場面があるので、次期 Windows Server 2019 では標準で入ってくれると良いですね。ちなみに Azure App Service は残念ながら 2019 がリリースされるまで難しそうです。