所有 HTTP 流量都通过 Windows 上的 HTTP.SYS 吗?
Posted
技术标签:
【中文标题】所有 HTTP 流量都通过 Windows 上的 HTTP.SYS 吗?【英文标题】:Does all HTTP traffic go through HTTP.SYS on Windows? 【发布时间】:2010-12-01 04:32:53 【问题描述】:我知道微软创建 HTTP.SYS 是为了提高 IIS 的性能。我的问题是 HTTP.SYS 是否处理 all 应用程序的 HTTP 流量?例如 JVM,如果它使用 Winsock 接收 HTTP 流量,HTTP.SYS 是否透明地通过 Winsock API 传递这些数据?还是在较新的 Windows 内核上 Winsock 被 HTTP.SYS 取代了?
据我所知,微软在他们的文档中并不清楚这一点。
【问题讨论】:
【参考方案1】:应用程序可以选择使用 http.sys。他们可以选择实现自己的 HTTP 协议处理程序。
出于安全原因,强烈建议应用程序使用 http.sys - 由 http.sys 实现的 HTTP 服务器已经相当完善,其他 HTTP 服务器可能会引入安全缺陷。
据我所知,HTTP.SYS 与 TCP 堆栈对话,而不是 NDIS(否则它必须在内部实现所有 TCP,这没有多大意义)。
【讨论】:
【参考方案2】:Winsock 是套接字级别,低于 HTTP,所以我认为它不会通过 Http.Sys。
Internet Explorer 使用 Wininet 进行 HTTP 通信,而在 Vista 上没有使用 Http.sys。
编辑我认为“Windows Internals”这本书会回答你的问题。
【讨论】:
Winsocket 是用户级库,HTTP.SYS 是内核级驱动程序。因此 HTTP.SYS 必须在 Winsock 之前,即使网络级别在技术上更高。这仍然是一个悬而未决的问题,HTTP.SYS 是否处理所有 HTTP 流量,如果是,未绑定到 IIS 的 HTTP 流量如何最终进入使用 Winsock 的用户进程? @LeeksandLeaks 仅处理被告知要侦听的端点上的流量,前提是应用程序处于活动状态并正在处理队列。当 Http.sys 通过 tcp 检测到类似 HTTP 的通信时,它不会神奇地激活。以上是关于所有 HTTP 流量都通过 Windows 上的 HTTP.SYS 吗?的主要内容,如果未能解决你的问题,请参考以下文章