Header 服务器未在 asp.net mvc 中删除

Header servers are not removed in asp.net mvc

我在 https url 上有一个 asp.net mvc 项目。

我已经从 IIS 中删除了 X-Power-By header。

我的 web.config 中有这些行:

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

我写了以下class:

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("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.config 中为上面的 class 添加了这一行:

<modules>
    <add name="RemoveServerHeaderModule" type="IZBSC.UI.Components.RemoveServerHeaderModule" />
</modules>

我什至在我的 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");
}

并且我在 Global.asax 中的 Application_Start() 方法中添加了以下代码行:

MvcHandler.DisableMvcResponseHeader = true;

现在服务器 header 已从我的页面中删除...

但是……

显示服务器 header 和 X-Power-By header 一些 css 和 jquery 以及图片文件。

我真的应该怎么做才能从我的所有请求(包括页面、样式、脚本和图像文件)中删除服务器和 X-Power-By header?

如果您希望从 整个 IIS 服务器 中删除服务器响应 Headers(从安全角度来看这更好),您可以从注册表中配置它:

https://blogs.msdn.microsoft.com/varunm/2013/04/23/remove-unwanted-http-response-headers/

删除此 headers:

  • 服务器 - 指定网络服务器版本。
  • X-Powered-By - 表示该网站是 "powered by ASP.NET."
  • X-AspNet-Version - 指定使用的 ASP.NET 版本。

来自 "Ori a" 的建议答案是我使用并且仍然经常使用的答案,它适用于托管代码。但是,JS 文件是静态内容,默认情况下直接提供,而不是通过托管代码。 托管代码模块仅适用于通过 ASP.NET 管道的代码。因此,您应该通过将此添加到 system.webServer 部分中的 webconfig 来强制所有请求通过您的托管代码:

<modules runAllManagedModulesForAllRequests="true">

像这样:

<system.webServer>     
  <modules runAllManagedModulesForAllRequests="true">     
   </modules>     
</system.webServer>

使用此语句,您甚至可以强制静态内容遵守您的 header 规则。希望对您有所帮助!