VS.NET(C#)-5.16_IIS6架构模型:HTTP.SYS简介

IIS6架构模型:HTTP.SYS简介

1,概述

HTTP.SYS 运行在windows 的内核模式下,作为驱动程序而存在。

它是Windows 2003的TCP/IP网络子系统的一部分,从结构上说,它是TCP之上的一个网络驱动程序,因此,HTTP.SYS不再属于IIS,它已经从IIS中独立了出来。

在TCP/IP的基础之上,HTTP.SYS的主要功能是:侦听用户的http请求(这个请求来自于TCPIP.sys驱动程序),并将请求转发给相关的web应用程序处理,最后,HTTP.SYS将处理结果返回给用户(返回到TCPIP.sys驱动程序)。

在HTTP.SYS的内部,它由如下的功能模块组成:

    ü    侦听模块。

    ü    应答缓存模块。

    ü    请求队列。

    ü    响应发送模块。

HTTP.SYS的内部组成结构图如下图:

VS.NET(C#)-5.16_IIS6架构模型:HTTP.SYS简介

 

2,HTTP.SYS对请求的响应过程

HTTP.SYS监听并接收用户的http请求,之后对用户的http请求做出回应

它的具体操作流程如下图所示:

VS.NET(C#)-5.16_IIS6架构模型:HTTP.SYS简介

流程说明:

    首先,用户通过浏览器对部署在IIS中的web应用程序发出http请求。

    经过各种处理,这个http请求最终会到达TCPIP.SYS驱动程序,TCPIP.SYS将这个请求转发给HTTP.SYS网络驱动程序。

    在HTTP.SYS中,它的监听模块始终在监听着网络上是否有对它的http请求,当一个http请求到达以后,监听模块会对这个http请求进行分析,并根据请求的类型的不同,将这些请求进行排队,等候应用程序池中的web应用程序对队列中的请求进行处理。

这里有个问题:HTTP.SYS如何把请求传递给应用程序的?

    在HTTP.SYS中,它维护着一张数据配置表,在这个表中记录着URL与应用程序池之间的对应关系,HTTP.SYS会对http请求中的URL进行跟踪。

    也就是说,HTTP.SYS注册了所有IIS 6.0应用,并给每个工作进程赋予一个句柄,IIS内部利用这些句柄来标识、注册应用程序要用到的一个或多个名称空间。

    因此,当HTTP.SYS接收到一个 HTTP请求的时候,它能够很快地将请求数据包从内核模式下的HTTP.SYS传递到正确的用户模式下的Web应用

    如果在一个http数据请求包到达之后,相关的应用程序池还没有启动,那么HTTP.SYS负责将这个应用程序池启动。这种处理方式也叫做请求式启动。当一个http请求被处理完毕之后,处理的结果会返回到HTTP.SYS中,由HTTP.SYS中的响应发送模块将这个处理结果返回到TCPIP.SYS中,并最终返回给用户。

3,HTTP.SYS对数据的缓存

如果用户对web网站上的某部分资源进行频繁的http请求的话,HTTP.SYS会把对这个请求的响应结果进行缓存。当用户下次对这部分资源进行请求的时候,HTTP.SYS会直接把在缓存中保存的响应结果直接发送给用户。

从用户发送http请求到系统返回响应结果的这一过程都是HTTP.SYS在内核模式下完成的不需要在内核模式和用户模式下进行切换,这样就极大地节省了系统资源,提高了请求的响应速度

有关HTTP.SYS数据缓存的过程如下图所示:

 VS.NET(C#)-5.16_IIS6架构模型:HTTP.SYS简介

4.HTTP.SYS的配置信息

    HTTP.SYS作为网络驱动程序,它已经从IIS中分离了出来,它不再属于IIS的一部分,因此HTTP.SYS的配置数据是存储在注册表中的,而不是IIS的配置数据库中。

    在注册表中,HTTP.SYS的注册信息位于如下路径下面:

    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP。

VS.NET(C#)-5.16_IIS6架构模型:HTTP.SYS简介

5、HTTP.SYS的其他功能

    管理TCP的连接

    验证HTTP请求

    记录IIS中的Web网站的日志信息

    实施带宽限制策略以

    及支持TCP/IP级的管理

    实现客户证书请求服务