【问题标题】:Remove Server header from self-hosted owin webapi on service fabric从服务结构上的自托管 owin webapi 中删除服务器标头
【发布时间】:2018-08-23 23:35:12
【问题描述】:

我一直试图摆脱在我的自托管 webapi2 应用程序上返回“Microsoft-HTTPAPI/2.0”的“服务器”标头,该应用程序作为 azure 服务结构上的无状态服务托管。我尝试过但没有用的东西:

我尝试实现 IFilter 以从 webapi 服务中删除标头,但是 调试该应用程序表明当时无法删除标头。

还尝试替换导致将新值附加到“Microsoft-HTTPAPI/2.0”值的值。

我尝试在 app.config 文件中设置网络服务器标志(有点像将其用作 web.config),但没有成功。

我试图覆盖 OWIN 管道的 OnSerdingHeaders 事件,但“服务器”标头没有删除,它显然会在更晚的阶段添加。

我尝试了所有可以在网上找到的关于使用应用程序构建器在代码中清除服务器的建议。

我尝试实现自定义委托处理程序来清除/覆盖标头,但也没有运气。

我什至尝试篡改我的调试机器上的注册表只是为了检查,但也没有成功。

我的笔测试人员坚持要摆脱它。还有其他方法吗?

提前致谢!

【问题讨论】:

  • 嗨!我目前正在处理同样的问题。到目前为止,您找到任何解决方案了吗?
  • MS 官方反馈是“不支持这个”

标签: server header asp.net-web-api2 owin service-fabric-stateless


【解决方案1】:

以下中间件解决了问题:

public class RemoveServerHeaderMiddleware
{
    private readonly RequestDelegate next;

    public RemoveServerHeaderMiddleware(RequestDelegate next)
    {
        this.next = Argument.NotNull(next, nameof(next));
    }

    public async Task Invoke(HttpContext context)
    {
        context.Response.OnStarting(() =>
        {
            context.Response.Headers.Add("Server", string.Empty);

            return Task.CompletedTask;
        });

        await this.next(context).ConfigureAwait(false);
    }
}

当然,别忘了注册中间件:

app.UseMiddleware<RemoveServerHeaderMiddleware>();

解决方案基于以下链接:

https://github.com/aspnet/HttpSysServer/issues/445

https://blogs.msdn.microsoft.com/timomta/2016/12/03/how-to-remove-the-server-header-from-weblistener/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多