首页 > 解决方案 > 从第一个重定向到 HTTPS 的请求中删除 Azure Web App 上的响应服务器标头

问题描述

我正在尝试从 Azure Web 应用程序(使用 ASP Net 核心应用程序)中删除响应服务器标头

在多次尝试更改web.config并使用中间件删除应用程序代码中的标头后,Microsoft 没有放弃并将响应标头设置为 Server: Microsoft-IIS/10.0 :)

仅当我尝试通过 http(不是 https)访问服务器时才会出现问题。来自服务器的响应代码是 301,这是唯一具有 Server 标头的响应。

检查日志我找不到任何对 http:// 的请求,也许这就是我无法删除标头的原因,因为我的应用程序代码中没有处理该请求。

我正在考虑的一个解决方案是仅禁用 azure HTTPS并在我的代码中重定向到 https(我测试并且正在工作 - 删除了服务器标头)

在不禁用仅 HTTPS 选项的情况下是否有另一种解决方法?

这是我尝试过的

启动.cs

    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            context.Response.Headers.Add("server", string.Empty)
        }
        app.UseHttpsRedirection();
    }

网络配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <httpRuntime enableVersionHeader="false" />
        <!-- Removes ASP.NET version header.  -->
    </system.web>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <remove name="Server" />
                <remove name="X-Powered-By" />
            </customHeaders>
            <redirectHeaders>
                <clear />
            </redirectHeaders>      
        </httpProtocol>
        <security>
            <requestFiltering removeServerHeader="true" />
            <!-- Removes Server header in IIS10 or later and also in Azure Web Apps -->
        </security>
        <rewrite>  
            <outboundRules>
                <rule name="Change Server Header"> <!-- if you're not removing it completely -->
                  <match serverVariable="RESPONSE_Server" pattern=".+" />
                    <action type="Rewrite" value="Unknown" />
                </rule>
            </outboundRules> 
        </rewrite>      

    </system.webServer>
</configuration>

标签: asp.net-coreazure-web-app-serviceresponse-headersazure-webapps

解决方案


更新

http://请求 的 URL 时,IIS 将处理它,这次没有代码。所以我们不能通过代码来控制,只能在服务器上设置,比如一些脚本或者工具。但是在Azure上,我们没有办法直接作为物理服务器来操作,所以经过探索,我建议Front Door可以用来处理这个问题。通过代理隐藏服务器信息应该是更好的方法。

经过我的测试,服务器信息是隐藏的,可以参考这个文档。从图中我们可以看出,没有301重定向请求,其他请求中也没有服务器信息。

在此处输入图像描述

在此处输入图像描述

以前的

您需要在程序中进行修改Global.asax.csWeb.config归档。

在 Global.asax.cs 中。

 public class MvcApplication : System.Web.HttpApplication
 {
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        MvcHandler.DisableMvcResponseHeader = true;
        PreSendRequestHeaders += Application_PreSendRequestHeaders;
    }

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

在 Web.config 中。

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

然后你可以部署你的应用程序。以上代码修改后,访问接口或者静态资源可以看到修改了服务器信息,当然也可以通过删除Remove

您还可以通过 http 状态码处理特殊事件。

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
     //HttpContext.Current.Response.Headers.Remove("Server");
     int StatusCode= HttpContext.Current.Response.StatusCode;
     // handle like http status code 301 
     HttpContext.Current.Response.Headers.Set("Server","N/A");
}

在此处输入图像描述

在此处输入图像描述


推荐阅读