しばやん雑記

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

ASP.NET や ASP.NET MVC アプリの HTTP レスポンスに含まれる拡張ヘッダを出力しないようにする

ASP.NET MVC 3 のソースコードが公開されていたので、いつものように何か面白い機能ないかなーと思って読んでいたところ、MVC アプリでは標準で出力される X-AspNetMvc-Version ヘッダを出力しないオプションを見つけたので、ほかの拡張ヘッダも出力しない方法を調べてみました。

ASP.NET MVC アプリではデフォルトでは

  • X-AspNet-Version
  • X-AspNetMvc-Version
  • X-Powered-By

が出力されるようになっています。実は全て別々のレイヤーで出力されているので、ちょっと設定がめんどくさいです。

X-AspNetMvc-Version ヘッダを消す

まずは比較的わかりやすい X-AspNetMvc-Version ヘッダを出力しないようにしてみます。

protected void Application_Start()
{
    // この 1 行を追加
    MvcHandler.DisableMvcResponseHeader = true;

    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

そのまんまのプロパティ名ですが、MvcHandler はあまり存在が知られていない感じですね。殆ど MapRoute などが隠してくれてますし。

では早速 IE9 のネットワークキャプチャ機能で調べてみます。

ちゃんと X-AspNetMvc-Version ヘッダが消えてくれました。ちなみに X-SourceFiles ってのは IIS Express を使ってる時だけに出力されるようです。デバッグ用ですかね。

X-AspNet-Version ヘッダを消す

では次は X-AspNet-Version ヘッダを出力しないようにしてみます。MVC ヘッダはコードを弄りましたが、このヘッダは Web.config の system.web セクションに以下の 1 行を追加するだけで変更可能です。

もちろん MVC 以外でも使えます。

<httpRuntime enableVersionHeader="false" />

これもそのまんまのプロパティ名なので問題ないですね。それでは同じように IE9 で確認してみましょう。

これもちゃんと X-AspNet-Version ヘッダが消えてくれました。残るは X-Powered-By ですが、このヘッダはちょっと特殊で ApplicationHost.config にカスタムヘッダとして追加されているので出力されています。

X-Powered-By を消す

さて、どうやって削除しようかという話になるわけですが、当然ながら Web.config の system.webServer セクションに追記するとオーバーライドすることが可能です。

<httpProtocol>
  <customHeaders>
    <clear />
  </customHeaders>
</httpProtocol>

上の定義は customHeaders コレクションに登録されている項目をすべて削除するという設定になります。これで ApplicationHost.config で定義されているカスタムヘッダがすべて無効になります。

それでは IE9 で確認してみましょう。

見事に X-Powered-By ヘッダも消えて、これで全てのヘッダを削除することが出来ました。

ちなみに ExpressWeb ではコントロールパネルからカスタムヘッダの削除が可能なので、こちらから削除しても問題ありません。

×アイコンをクリックして、更新ボタンをクリックすれば反映されます。