如何删除ASP.Net MVC默认HTTP头?

我正在处理的MVC应用程序中的每个页面都将这些HTTP标头设置为响应:

X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 X-AspNetMvc-Version: 2.0 

我如何防止这些显示?

“powered by”是IIS中的自定义标头。 更改它取决于您使用的IIS版本。 有关如何修改或删除的一些信息,请参阅此处:

http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders

要删除MVC头,

在Global.asax中的Application Start事件中:

 MvcHandler.DisableMvcResponseHeader = true; 

把这个放在web.config中去掉X-AspNet-Version头文件:

 <system.web> <httpRuntime enableVersionHeader="false" /> </system.web> 

你也可以通过向你的global.asax文件添加代码来删除它们:

  protected void Application_PreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("X-Powered-By"); HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version"); HttpContext.Current.Response.Headers.Remove("Server"); } 

我在我的web.configfind了这个configuration,它是在Visual Studio中创build的New Web Site... (而不是New Project... )。 由于这个问题陈述了一个ASP.NET MVC应用程序,而不是相关的,但仍然是一个选项。

 <system.webServer> <httpProtocol> <customHeaders> <clear /> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer> 

更新 :另外,特洛伊亨特有一篇文章标题为嘘…不要让你的响应标题说话过于详细的步骤删除这些头以及他的ASafaWeb工具扫描他们和其他安全configuration的链接。

如在IIS 7上隐藏ASP.NET MVC Web应用程序中所述 ,可以通过将以下configuration节应用于web.config来closuresX-AspNet-Version标头:

 <system.web> <httpRuntime enableVersionHeader="false"/> </system.web> 

并通过更改您的Global.asax.cs删除X-AspNetMvc-Version标头,如下所示:

 protected void Application_Start() { MvcHandler.DisableMvcResponseHeader = true; } 

如自定义标题中所述您可以通过将以下configuration部分应用于web.config来移除“X-Powered-By”标题:

 <system.webServer> <httpProtocol> <customHeaders> <clear /> </customHeaders> </httpProtocol> </system.webServer> 

有没有简单的方法来通过configuration删除“服务器”响应头,但您可以实现一个HttpModule删除特定的HTTP头,如隐藏在IIS 7上的ASP.NET MVC Web应用程序和如何删除服务器-x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-the-response-header-in-iis7 。

.NET核心

要在Program.cs文件中删除Server头,请在调用.UseKestrel时添加以下选项:

 .UseKestrel(opt => opt.AddServerHeader = false) 

要删除X-Powered-By标题,如果部署到IIS,请编辑web.config并在system.webServer标记内添加以下部分:

 <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> 

.NET 4.5.2

要删除您的global.asax文件中的服务器标题,请添加以下内容:

  protected void Application_BeginRequest(object sender, EventArgs e) { string[] headers = { "Server", "X-AspNet-Version" }; if (!Response.HeadersWritten) { Response.AddOnSendingHeaders((c) => { if (c != null && c.Response != null && c.Response.Headers != null) { foreach (string header in headers) { if (c.Response.Headers[header] != null) { c.Response.Headers.Remove(header); } } } }); } } 

Pre .NET 4.5.2

将下面的c#类添加到您的项目中:

 public class RemoveServerHeaderModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += OnPreSendRequestHeaders; } public void Dispose() { } void OnPreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("Server"); } } 

然后在你的web.config中添加下面的<modules>部分:

 <system.webServer> .... <modules> <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" /> </modules> 

不过,我有一个问题,子项目找不到这个模块。 不好玩。

删除X-AspNetMvc-Version标题

要删除“X-AspNetMvc-Version”标签,对于任何版本的.NET,修改您的“web.config”文件以包含:

 <system.web> ... <httpRuntime enableVersionHeader="false" /> ... </system.web> 

感谢微软让这难以置信的令人难以置信。 或者,也许这是你的意图,以便你可以跟踪世界各地的IIS和MVC安装…

在Asp.Net Core中,你可以像这样编辑web.config文件:

 <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> 

您可以删除Kestrel选项中的服务器标题:

  .UseKestrel(c => { // removes the server header c.AddServerHeader = false; }) 

如在“ 删除Windows Azure网站上的标准服务器标题”页面上所示,可以使用以下命令删除标题:

 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <clear /> </customHeaders> </httpProtocol> <security> <requestFiltering removeServerHeader="true"/> </security> </system.webServer> <system.web> <httpRuntime enableVersionHeader="false" /> </system.web> </configuration> 

这将删除服务器标题和X标头。

这在Visual Studio 2015的testing中本地工作。

你可以改变任何头文件或Application_EndRequest()任何东西,试试这个

 protected void Application_EndRequest() { // removing excessive headers. They don't need to see this. Response.Headers.Remove("header_name"); } 

为了完整起见,还有另一种方法使用registry删除Server标题。

看到这个MSDN博客 。

在以下registry项中创build一个名为DisableServerHeader的DWORD条目,并将该值设置为1。

HKLM \系统\ CurrentControlSet \服务\ HTTP \参数

我宁愿使用Web.configfind一个合适的解决scheme,但是使用<rewrite>并不好,因为它需要安装rewrite模块,即使这样也不会真正删除头文件,只是将其清空。

X-Powered-By头由IIS添加到HTTP响应中,所以即使在服务器级别,也可以通过IISpipe理器将其移除:

您可以直接使用web.config:

 <system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>