I need to remove the following headers from my ASP.NET MVC 3 web app.
Server
X-AspNet-Version
X-AspNetMvc-Version
X-AspNetWebPages-Version
X-Powered-By
I found two options that work. Option 1 is cleaner and actually removes the server header, but I'm trying to find out if there are any side effects I should be worried about. Is either option better than the other? What are the pros/cons of each method?
Option 1
Global.asax.cs >> Application_Start()
PreSendRequestHeaders += Application_PreSendRequestHeaders;
Global.asax.cs
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
HttpContext.Current.Response.Headers.Remove("X-AspNetWebPages-Version");
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Remove("X-Powered-By");
HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
}
Option 2
Web.config >> inside <system.web>
node (removes X-AspNet-Version)
<httpRuntime enableVersionHeader="false" />
Web.config >> inside <system.webServer>
node (removes X-Powered-By)
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Web.config >> inside <system.webServer>
node (changes value of Server, URLRewrite required)
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
Global.asax.cs >> Application_Start() (removes X-AspNetMvc-Version and X-AspNetWebPages-Version)
MvcHandler.DisableMvcResponseHeader = true;
WebPageHttpHandler.DisableWebPagesResponseHeader = true;