IIS的GET请求返回Microsoft-HttpApi / 2.0


GET request to IIS returns Microsoft-HttpApi/2.0

我有6台运行IIS和Apache的相同机器。 今天,其中一个决定停止服务请求。 当我从localhost / resource尝试时,我可以访问所有的webapp,但是当我从url / resource尝试时,我得到了404。我对无法正常运行的计算机发出了Get请求,然后将其取回:

  • 伺服器:Microsoft-HTTPAPI / 2.0
  • 连接方式:关闭

与正常工作的服务器相比:

  • 服务器:Microsoft-IIS / 8.5
  • X-Powered-by:ASP.NET
  • 内容类型:text / html

尝试搜索此问题,但一无所获,有人知道吗?


Windows具有HTTP服务,该服务管理Windows计算机上对IIS的调用以及其他启用HTTP的服务。您需要对其进行配置以处理您的呼叫,或者在WAMP或类似的非IIS Web服务器在Windows上的情况下,您可能只需要将其关闭即可。

当您看到" Microsoft-HttpApi / 2.0"返回错误(例如400"错误的URL"或"错误的标头"等)时,出现问题的可能性最大,因为HTTP.sys服务正在拦截您的http请求并终止它,因为它确实不符合配置的最低验证规则。

在注册表中的HKEY_LOCAL_MACHINE System CurrentControlSet Services HTTP Parameters中可以找到此配置。就我而言,这很令人窒息,因为我有一个RESTful调用,URL中有一个400个字符的段,比默认值260多了160个字符,所以我

  • 添加了注册表参数UrlSegmentMaxLength的DWORD值为512,
  • 使用net stop http停止服务
  • 使用net start http启动服务
  • 我以前遇到过这些问题,很容易进行故障排除,但是在网络上很少能解决这个问题。

    试试这些链接

    • "潜在的问题是客户端向IIS发送了一个请求,该请求违反了HTTP.sys强制执行的一个或多个规则"
    • 此处介绍了启用HTTP.sys上的日志记录
    • 可以在注册表中找到HTTP.sys参数的列表。


    有点晚了,所以放在这里后代;-)

    在尝试了网上找到的各种解决方案之后,我几乎放弃了,但发现了这个小块。

    如果响应的服务器标头返回Microsoft-HttpApi/2.0,则表示正在调用HTTP.sys,而不是IIS。

    如此一来,许多变通办法将无法正常工作(URLScan等)。

    但是,这可行:

  • 打开注册表
  • 导航HKLM SYSTEM CurrentControlSet Services HTTP Parameters
  • 如果DisableServerHeader不存在,则创建它(DWORD 32位)并将其值设置为2。如果确实存在,并且该值不为2,则将其设置为2。
  • 最后,先调用net stop http然后net start http重新启动服务
  • src:WS / WCF:删除服务器头

    Set below registry flag to: 2
    HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader

    Setting this to 2 will ensure that self host WCF services no longer sends the SERVER header and thus ensure we are security compliant.
    Please note that this disables ALL server headers.

    The default value of 0 enables the header, and the value of 1 disables server header from DRIVER (http.sys), but app can still have headers.

    对我来说,我必须重新启动服务器才能使更改生效。

    希望这可以帮助某人


    就我而言,运行Windows 10 Pro,它是Windows MultiPoint Service。

    通过执行:

    1
    net stop wms

    端口80已释放。


    我在客户端站点上的Web应用程序上工作时,遇到了一个问题,该站点加载了站点根页面,但是reports文件夹始终为该文件夹中存在的文件返回404。当应用程序设置为4时,404页面显示.Net版本2,对根目录中不存在的页面进行测试返回的404页面显示.Net 4。

    我只尝试了http:// localhost / reports并返回了Microsoft Reporting Services页面。不属于我的申请。

    当出现意外的404并且文件存在时,请确保仅检查文件夹的默认文档。


    这个问题和一系列答复帮助我了解了所遇到的相关问题。我的问题集中在只使用一个子域来访问我们的服务器(例如,在我们公司网络中的浏览器中键入" www / somepath"),该服务器过去曾在较旧的服务器上运行,但在系统处于运行状态时不再起作用升级到新服务器。使用Chrome Devtools检查网络流量时,我在标题中看到了意外的Microsoft-HttpApi/2.0字符串。

    我的HTTP.sys进程已经在记录日志,因此我可以验证我的流量是否正在流向该服务并返回404 NotFound状态代码。

    我的解决方案是为该子域添加到IIS站点的绑定,使IIS响应而不是HTTP.sys进程,如此服务器故障文章-https://serverfault.com/questions/479274/why-is-中所述microsoft-httpapi-returning-404-to-my-network-switch