我正试图从Azure Web应用程序中删除响应服务器头(与ASP Net核心应用程序)。
经过多次尝试改变 web.config 并使用中间件在app代码中删除头,微软也不甘示弱,将响应头设置为Server。Microsoft-IIS10.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();
}
web.config
<?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>
更新
当URL的 http://
的请求,IIS会进行处理,这次不用代码。所以我们不能通过代码来控制,只能在服务器上进行设置,比如一些脚本或者工具。但是在Azure上,我们没有办法直接作为物理服务器来操作,所以经过探索,我建议 Front Door
可以用来处理这个问题。通过代理隐藏服务器信息应该是一个比较好的方法。
经过我的测试,服务器信息是隐藏的,大家可以参考这个 文件 . 从图片中我们可以看到,没有301重定向请求,也没有其他请求中的服务器信息。
PRIVIOUS
您需要修改 Global.asax.cs
和 Web.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>
然后u就可以部署你的程序了。经过以上代码修改后,访问接口或静态资源可以看到服务器信息被修改了,当然也可以通过以下方式删除 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");
}