我在asp.net core 2.1 / kestrel上运行了一个无状态服务。该服务是安全的,可以通过LB和SF反向代理从外部进行访问。 Service Fabric版本为6.3.187.9494。
我需要从响应中完全删除Server标头,并且通过操作KestrelServerOptions.AddServerHeader在服务本身中做到这一点没有问题,但似乎 ReverseProxy会添加其自己的Service标头,即Microsoft -HTTPAPI / 2.0 。
这就是我要检查的方式-我从运行该节点的节点向服务端点发出请求,但没有任何服务器标头。然后,我通过反向代理执行相同的操作,然后返回-服务器:Microsoft-HTTPAPI / 2.0。
通读ApplicationGateway/Http 设置,我发现名为 RemoveServiceResponseHeaders -
的属性用半冒号/逗号分隔的响应标题列表 从服务响应中删除;在将其转发给客户端之前。 如果设置为空字符串;传递所有返回的标头 服务保持原样。即不要覆盖日期和服务器
我已将其设置为“ Date; Server”,并更新了群集,但是没有运气,因为我仍然获得该Server标头。
有什么建议吗?
答案 0 :(得分:1)
恐怕您无法使用ServiceFabric中的常规“ RemoveServiceResponseHeaders”配置来做到这一点。只会从您的服务响应中删除收到的读者。
在Windows上,服务结构HttpGateway运行在负责此标头的 HTTP.sys 内核模块之上,SF在此没有发言权。
在我进一步介绍之前,
如果出于安全原因要删除此文件,则应重新考虑使用SF提供的内置ApplicationGateway,它将公开您的所有服务,并且目前无法控制通过它公开的服务,我认为这是有风险的高于仅删除服务器标头,因为它不公开真实的服务器名称。
走得更远
要解决您的问题,您有两种选择:
您将需要在注册表项DisableServerHeader
中添加HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
DWORD值并将其值设置为2
。
此键控制http.sys在附加。 http响应标头“服务器”,用于发送给客户端的响应。 默认值为0 ,将使用标题值 应用程序提供给http.sys,或者将附加默认值 响应标头中的“ Microsoft-HTTPAPI / 2.0”。值为1将 不为http.sys生成的响应附加“服务器”标头 (响应以400、503和其他状态码结尾)。值2 将阻止http.sys将“服务器”标头附加到 响应。如果响应中出现“服务器”标头,则不会 被删除,如果不存在,则不会添加。
请查看此答案,并提供有关操作方法的详细信息:GET request to IIS returns Microsoft-HttpApi/2.0
。