如何删除" Microsoft-HTTPAPI / 2.0"来自App Service Web App

时间:2017-05-04 10:07:55

标签: asp.net azure azure-web-sites

我创建了两个asp.net + MVC应用程序,并将一个部署到Azure App Service Web应用程序,并将其他部署到ASE(应用程序服务环境)中创建的应用程序服务Web应用程序中。

在URL中提供特殊字符时,响应头包含" Microsoft-HTTPAPI / 2.0"。我在应用程序中完成了以下更改,但问题仍然存在。

<security>
  <requestFiltering removeServerHeader="true"/>
</security>

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

2 个答案:

答案 0 :(得分:1)

删除默认标头。您可以创建一个http模块来执行此操作。以下代码供您参考。

public class RemoveDefaultHeaderModule : IHttpModule
{
    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += Context_PreSendRequestHeaders;
    }

    private void Context_PreSendRequestHeaders(object sender, EventArgs e)
    {
        //Remove the header you wanted
        (sender as HttpApplication).Response.Headers.Remove("Server");
        (sender as HttpApplication).Response.Headers.Remove("X-AspNet-Version");
    }
}

您还需要在web.config中注册此模块。不要忘记将runAllManagedModulesForAllRequests属性设置为true,这将使该模块适用于静态资源。

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="RemoveDefaultHeaderModule" type="TestServerHeader.RemoveDefaultHeaderModule" />
  </modules>
</system.webServer>

答案 1 :(得分:0)

我正在使用Windows Server 2016和IIS 10.0,我通过运行powershell(作为管理员)来完成它并执行以下操作:

PS > cd IIS:\
PS > Set-WebConfigurationProperty -filter "system.webServer/security/requestFiltering" -name "removeServerHeader" -value "True"

在web.config中加入这个:

<security>
  <requestFiltering removeServerHeader="true" />
</security>

作为参考,我将此blog post红色。

但是,当我因任何原因编辑web.config时,我必须重新运行脚本才能再次删除服务器头...或者在更新web.config后它似乎在那里很短的时间。

希望这有帮助!