我有一个在 Azure Web Roles 中运行的网站。我针对 asafaweb.com 对该站点进行了测试,并收到了“过多的标题”警告。
基本上,Azure 会发送 IIS 版本和 .net 版本作为标头的一部分。
有很多关于如何在 IIS 中关闭这些标头的信息,但是如何在 Azure 中关闭它们?
我有一个在 Azure Web Roles 中运行的网站。我针对 asafaweb.com 对该站点进行了测试,并收到了“过多的标题”警告。
基本上,Azure 会发送 IIS 版本和 .net 版本作为标头的一部分。
有很多关于如何在 IIS 中关闭这些标头的信息,但是如何在 Azure 中关闭它们?
这是我在大多数项目中用来隐藏这些标题的方法:
Global.asax.cs(仅适用于 MVC 项目)
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
自定义 HttpModule
public class RemoveHeadersHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
private void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
}
public void Dispose()
{
}
}
网络配置
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="Server" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="true">
. . .
<add name="RemoveHeadersHttpModule" type="MyNamespace.RemoveHeadersHttpModule"/>
</modules>
. . .
</system.webServer>
如果您想要一个完整的解决方案来删除Azure上的所有多余标头,该解决方案也适用于 Cassini,而无需使用自定义 HttpModule,请参见此处:
Windows Azure Web 角色本质上是启用了 IIS 的 Windows Server 2008。因此,如果您想定制 IIS,您可以使用启动脚本并调用 appcmd 来更改您想要的设置(或以您通常使用的任何其他方式对其进行操作)。您的脚本将类似于:
%windir%\system32\inetsrv\appcmd set ...