我的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
我该如何删除它们?
我不确定为什么你的X-Powered-By
没有被删除,但今年早些时候的Windows Update补丁使得Application_PreSendRequestHeaders
修复不再为我们删除Server:
标题。
我们必须使用system.webServer
在我们的IIS URL Rewrite Module 2块(在Web.config中)添加一个部分:
<rewrite>
<outboundRules>
<rule name="Remove RESPONSE_Server">
<match serverVariable="RESPONSE_Server" pattern=".+"/>
<action type="Rewrite" value=""/>
</rule>
</outboundRules>
</rewrite>
如果您使用IIS 7将Global.asax中的DisableMvcResponseHeader属性设置为true,则应删除“X-Powered-By”标题
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
主要是服务器IIS不允许我们删除服务器标签。您可以尝试使用以下代码来实现目标。添加Global.asax
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Set("Server", "");
}
此代码将删除您的“X-AspNet-Version”并将Server值设置为空白。
通常通过简单的web.config配置删除X-Powered-By:ASP.NET
:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
...
ARR
不受此配置的影响,必须通过IIS管理器,IIS根目录上的编辑器配置(不在站点上)删除:转到system.webServer/proxy
节点并将arrResponseHeader
设置为false
。在IISReset
之后,它被考虑在内。
我发现这个here,除了这篇文章是关于旧的IIS 6.0配置的方式。
因此,对于您的情况,如果无法访问IIS设置,则必须要求服务器所有者调整其配置。或者尝试Url Rewrite solution但当然,使用HTTP_X_Powered_By
服务器变量。它最多只会删除标题,我还没有检查它是否适用于ARR情况。