当自托管 ASP.NET 核心时 - 它是否使用 http.sys(如果可用)?

When self-hosting ASP.NET Core - does it use http.sys if available?

http.sys 是 Windows 中的内核模式驱动程序,可大大加快传入 HTTP 请求的处理和路由。它是在 Windows NT 4 的日子里添加的,以便与 Apache 相比为当时新生的 IIS 提供基准提升。

对于那些不熟悉的人:它是一个劫持传入 HTTP 请求的组件(在端口 80 和 443 上,您也可以将其配置为监视其他端口)并根据其配置将它们路由到不同的用户态应用程序,请参阅 MSDN 了解更多信息详情:https://msdn.microsoft.com/en-us/library/windows/desktop/aa364510(v=vs.85).aspx

今天,如果您使用 IIS 来托管您的应用程序,您将利用 http.sys

但是,我找不到任何说明自托管 ASP.NET 核心应用程序是否会使用 http.sys(如果存在)的信息。

虽然 Kestrel 不使用或不支持 http.sys(它还必须 运行 on Linux 而没有 http.sys),您可以使用 WebListener (also here, which uses http.sys and usage example here) 来实现这一点。但是,出于显而易见的原因,仅在 Windows 上。

与 Kestrel 不同,WebListener 被认为是生产就绪的,这意味着您可以使用它来托管面向 Internet 的应用程序。另一边的 Kestrel 还没有,所以在撰写本文时官方建议始终在反向代理(IIS、nginx 等)后面使用 Kestrel。