asp.net-core - 从第一个重定向到 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>
解决方案
更新
当http://
请求 的 URL 时,IIS 将处理它,这次没有代码。所以我们不能通过代码来控制,只能在服务器上设置,比如一些脚本或者工具。但是在Azure上,我们没有办法直接作为物理服务器来操作,所以经过探索,我建议Front Door
可以用来处理这个问题。通过代理隐藏服务器信息应该是更好的方法。
经过我的测试,服务器信息是隐藏的,可以参考这个文档。从图中我们可以看出,没有301重定向请求,其他请求中也没有服务器信息。
以前的
您需要在程序中进行修改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>
然后你可以部署你的应用程序。以上代码修改后,访问接口或者静态资源可以看到修改了服务器信息,当然也可以通过删除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");
}
推荐阅读
- javascript - 子窗口不关闭
- python - 如何理解拆分数据的函数
- flutter - 如何在 Flutter 中的任何图标上显示弹出菜单?
- sql-server - SQL Server query for calculating daily census
- javascript - React hooks 函数依赖
- sql - 如何向我的 Hive 表添加分区?
- react-native - 对 firebase 数据库字段的多个查询
- c# - C# Asp Core 2.2 模型绑定对象在 OnGet() 中实例化,但不在 OnPost() 中
- facebook - 如何在 React Native 中启动 ViewContent facebook 事件?
- azure-devops - 来自私有源的 Azure 站点扩展