【问题标题】:Why aren't the Server and X-Powered-By headers being removed?为什么不删除 Server 和 X-Powered-By 标头?
【发布时间】:2013-01-06 00:54:51
【问题描述】:

我的 ASP.NET 4.5 应用程序正在部署到共享主机,因此我无法访问 IIS 设置。要删除X-Powered-By 标头,我在web.config 中指定:

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

要删除Server 标头,我在Global.asax 中指定:

protected void Application_PreSendRequestHeaders(object sender, EventArgs e) {
  HttpContext.Current.Response.Headers.Remove("Server");
}

但是,响应仍然包含两个标头:

Cache-Control:private
Content-Encoding:deflate
Content-Length:672
Content-Type:text/html; charset=utf-8
Date:Sun, 06 Jan 2013 00:41:20 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ARR/2.5
X-Powered-By:ASP.NET

如何删除它们?

【问题讨论】:

  • 这不是 IIS 设置吗?
  • 您可能需要编写一个自定义 HttpModule 来为您执行此操作 - 请参阅 this question
  • 谢谢,我试试。但是HttpModule 不是和我在Global.asax 中的方法一样吗?
  • 你绝对正确的伙伴,我浏览了你的那部分代码,看看我的回答

标签: asp.net iis web-config http-headers global-asax


【解决方案1】:

我不确定为什么您的X-Powered-By 没有被删除,但今年早些时候的 Windows 更新补丁使Application_PreSendRequestHeaders 修复不再为我们删除Server: 标头。

我们必须使用IIS URL Rewrite Module 2 向我们的system.webServer 块(在Web.config 中)添加一个部分:

<rewrite>
    <outboundRules>
        <rule name="Remove RESPONSE_Server">
            <match serverVariable="RESPONSE_Server" pattern=".+"/>
            <action type="Rewrite" value=""/>
        </rule>
    </outboundRules>
</rewrite>

【讨论】:

    【解决方案2】:

    X-Powered-By:ASP.NET 通常通过简单的 web.config 配置删除:

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

    ARR 不受此配置影响,它必须通过 IIS 管理器删除,在 IIS 根目录(不在站点上)编辑器配置:转到 system.webServer/proxy 节点并将 arrResponseHeader 设置为 @ 987654328@。在IISReset 之后,将其考虑在内。
    我找到了这个here,除了这篇文章是关于旧的 IIS 6.0 的配置方式。

    因此,对于您的情况,如果无法访问 IIS 设置,您将不得不要求服务器所有者调整其配置。或者尝试Url Rewrite solution,当然,使用HTTP_X_Powered_By 服务器变量。它充其量只会空白标题,我还没有检查它是否适用于 ARR 案例。

    【讨论】:

      【解决方案3】:

      如果您使用 IIS 7,将 Global.asax 中的 DisableMvcResponseHeader 属性设置为 true,则应删除“X-Powered-By”标头

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

      【讨论】:

      • 嗯,这很奇怪,因为它应该适用于 IIS 7。您是否尝试过使用我链接到的 http 模块示例?
      • 目前不在我的开发机器上,我会尝试。谢谢。
      • 这个是X-AspNetMvc-Version 标头,不是X-Powered-By。我已经写了一个答案,涵盖了我知道here 的不同标题案例。
      【解决方案4】:

      大多数服务器 IIS 不允许我们删除服务器标签。您可以尝试以下代码来实现您的目标。 添加 Global.asax

      protected void Application_PreSendRequestHeaders()
      {
          Response.Headers.Remove("X-AspNet-Version");
           HttpContext.Current.Response.Headers.Set("Server", "");
       }
      

      此代码将删除您的“X-AspNet-Version”并将服务器值设置为空白。

      【讨论】:

        猜你喜欢
        • 2021-05-06
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        • 1970-01-01
        • 1970-01-01
        • 2022-12-29
        相关资源
        最近更新 更多