Windows Server 2016 IIS10.0移除Microsoft-HTTPAPI/2.0响应头问题咨询
问题原因
你遇到的Server: Microsoft-HTTPAPI/2.0响应头是Windows内核HTTP协议栈http.sys直接返回400类错误时自带的字段。你之前尝试的URL Rewrite规则属于IIS工作进程层的配置,仅能作用于IIS正常处理的请求,无法拦截修改http.sys直接抛出的错误响应;而DisableServerHeader=2的注册表配置默认仅支持Windows Server 2019及更高版本系统,原生Windows Server 2016不支持该配置,所以修改后不生效。
可行解决方案
方案1:安装系统补丁后配置注册表
KB5003638及之后的Windows Server 2016累积更新已经新增了对DisableServerHeader=2配置的支持,补丁安装完成后按以下步骤操作即可全局移除所有http.sys响应的Server头:
- 检查系统补丁安装情况,未安装KB5003638或更高版本月度累积补丁的话,先通过Windows Update完成补丁安装并重启系统
- 打开注册表编辑器,定位到路径:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters - 新建32位DWORD值,命名为
DisableServerHeader,赋值为2 - 依次执行以下命令重启服务即可生效:
net stop http /y net start http iisreset
方案2:配置http.sys自定义错误页
如果暂时不方便安装系统补丁,可以通过自定义http.sys错误响应的方式替换默认返回内容,自定义响应中可以直接删除Server头:
- 提前准备自定义的400错误静态页,存放到本地目录(例如
C:\inetpub\errorpages\400.htm) - 以管理员身份打开命令提示符,执行以下命令配置http.sys自定义错误处理:
netsh http add errorhandler 400 C:\inetpub\errorpages\400.htm
- 重启http服务即可,后续http.sys返回400错误时会读取自定义页面返回,不会再携带默认的
Microsoft-HTTPAPI/2.0头。
方案3:禁用TRACE请求(针对当前触发场景)
你当前的报错是由带请求体的TRACE请求触发,TRACE方法本身不允许携带请求体,你可以直接在IIS层禁用TRACE方法,让请求由IIS拦截处理,即可通过IIS的响应头规则删除Server字段:
- 打开IIS管理器,定位到对应站点,打开「请求筛选」功能
- 切换到「HTTP谓词」标签页,点击右侧操作栏的「拒绝谓词」,输入
TRACE后保存 - 进入站点的「HTTP响应头」配置页,添加删除Server头的规则即可,此时TRACE请求的响应由IIS处理,规则可以正常生效。
内容的提问来源于stack exchange,提问作者user1414232
相关产品推荐
相关产品推荐

