ASP.NET Core は元々 Helios で動かす予定だったのが、サーバーが Kestrel への 1 本化に伴い IIS 向けには HttpPlatformHandler が採用されてきましたが、少し前に HttpPlatformHandler から fork した ASP.NET Core Module が使われることになりました。
公式からアナウンスと移行する理由が発表されています。
ざっくりと説明すると、HttpPlatformHandler は ASP.NET Core 専用ではなく、Java や Ruby などを動作させるための汎用的なリバースプロキシですが、最近は ASP.NET Core に必要な機能が実装される流れでした。
汎用的なモジュールである HttpPlatformHandler に専用の機能を入れるのではなく、新しいモジュールを作って専用の機能を入れるべきという話になり、作られたのが ASP.NET Core Module というわけです。
既に Web Apps にはインストールされているので、Web.config を修正すれば使えるようになっています。
App_Offline.htm 対応
ぶっちゃけ、この機能を知らなかったんですが App_Offline.htm というファイルを置くと、アプリケーションが止まるようになっているみたいです。
[ASP.NET]Webアプリケーションを一時的に停止するには?[2.0のみ] - @IT
ASP.NET の機能のようですが、今後使うことがあるのかはちょっとわかりません。
クライアント証明書のフォワーディング
ARR やそれを利用している Web Apps には近い機能が実装されていますが、ASP.NET Core Module と HttpPlatformHandler にも実装されるようです。
仕様はわかりませんが、HTTP ヘッダーで Base64 な証明書を渡してくるのでしょう。
system.webServer/handlers のロック解除
最初は何を言っているんだという感じでしたが、どうやら ASP.NET 4 をインストールしていない IIS は該当のセクションが何故かロックされていて、Web.config からの書き換えが出来ないらしいです。
これはインストーラーでの対応なのかなと思います。
仮想ディレクトリ対応
これまでに試したことはなかったのですが、HttpPlatformHandler はアプリケーションのルートでしか動作しないようです。冷静になって考えると、ルーティングは下で動くアプリケーションに依存するので、気にしなくても良かったのですね。
しかし ASP.NET ではサブディレクトリに別のアプリケーションをデプロイ出来るので、そういった用途向けへの対応だと思います。仮想ディレクトリ名を環境変数で渡す形みたいです。
HttpPlatformHandler の話
ASP.NET Core の開発に伴って発見されたバグは、今後公開される予定の HttpPlatformHandler v1.3? にも反映される予定になっているようです。内容は Issue に追加されています
Issues · aspnet/IISIntegration · GitHub
中でも大きいものは、エスケープ解除がされてフォワーディングされてしまう問題かなと思います。
HttpPlatformHandler v1.3? がどのタイミングでリリースされるのかは不明ですが、ASP.NET Core Module が GA するまでには出るのではないかと。