上記のリンクに基づいて、HTTP モジュールで応答ヘッダーを削除する方法を知っています。Server
なぜこのように削除する必要があるのか を知りたいだけです。
上記のリンクに基づいて、HTTP モジュールで応答ヘッダーを削除する方法を知っています。Server
なぜこのように削除する必要があるのか を知りたいだけです。
Aristos リンクのコメントは、理由に対する適切な回答を提供します。
要するに、MS は人々がこの値を簡単に変更できるようにしたくないということです。マーケティングまたはその他の目的であるかどうかは、解釈の余地があります。
この議論から取り除かなければならないことの 1 つは、サーバー ヘッダーの変更は、どのような種類のセキュリティにも役立たないということです。実行中の Web サーバー ソフトウェアの種類 (およびバージョン) を正確に検出する方法は無数にあります。
そうする理由は 1 つしかありません。バイトを節約するためです。非常にトラフィックの多いサイトを運営していない限り、これは問題ではありません。トラフィックの多いサイトを運営している場合、すでに 1 つ以上のカスタム モジュールを実行している可能性があります。
この例は、「サーバー」ヘッダーを実際に削除するのではなく、何か他のものを書き込むだけです。
より適切なタイトルは、「IIS7 でカスタムの「サーバー」http ヘッダーを送信する方法」です。この同様の記事を読むhttp://blogs.technet.com/b/stefan_gossner/archive/2008/03/12/iis-7-how-to-send-a-custom-server-http-header.aspx
なぜこの方法が唯一の方法ではないのか疑問に思っている場合は、Web サーバーに移動して、イニシャル ヘッダーからそれを削除するだけです。
なぜ IHttpModule + PreSendRequestHeader を使用するのか疑問に思われる場合は、これが最初の部分でヘッダーを取得し、iis がそれを行う前に最初に「サーバー」ヘッダーを配置する方法であるためです。
この助けを願っています。
IIS 7 以降の web.config ファイルに outboundRule を追加して、値を空にすることもできます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
これらのヘッダーを削除する基本的な考え方は次のとおりです
Response.Headers.Set("Server", "My Awesome Server");
アプリケーションプールが「統合パイプラインモード」に設定されている限り、ページコードビハインドで正常に機能します。
基本的に、IPMは、IISパイプラインをASP.NETパイプラインと統合して、この種の処理を実行できるようにすることを目的としています。議論については、 MehrdadAfshariの回答を参照してください。