当前位置:文档之家› IIS架构与HTTP请求处理流程

IIS架构与HTTP请求处理流程

*************************************************************************************************************************************Windows操作系统中的IIS负责提供互联网服务,一台运行了IIS的计算机可以看成是一台Web服务器。

Windows XP SP2 中IIS主版本号为5,Windows 2003 Server为6,Vista和Windows Server 2008为7。

对于Windows 2003 Server,其默认支持的版本为1.1,因此必须单独安装.NET Framework 2.0以上版本[1]。

目前,IIS 6是使用最为广泛的版本,IIS 5已基本不在Web服务器上部署, IIS 6与IIS 5相比在系统架构上有着较大的差异,IIS 7与IIS 6相比,基本架构并没有根本性的变化,但在许多方面有新的增强和改进。

本书选择IIS 6/7进行介绍,大部分内容也适合于IIS 5,但IIS 5一些已过时的特性就不介绍了。

首先,我们来仔细分辨一下三个很容易混淆的基本概念。

8.1.1网站、Web应用程序和虚拟目录在IIS中可以创建网站、Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息。

“网站”、“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8‑1所示。

图 8‑1 网站,应用程序与虚拟目录简而言之,一个“网站(Web Site)”包含一个或多个“ Web 应用程序(Web Application)”,一个Web 应用程序包含一个或多个“虚拟目录(Virtual Directory)”,而虚拟目录则映射到 Web 服务器或远程计算机上的物理目录。

图 8‑2所示为运行IIS 7的一个Web服务器。

图 8‑2 IIS 7中的网站,应用程序与虚拟目录图 8‑2中可以清楚地看到此Web服务器上有两个“网站”:Default Web Site和NewWebSite,其中Default Web Site网站中有三个“Web 应用程序”:HappyBookShopService、HappyBookShopWebSite和OnlineAlbum。

而HappyBookShopWebSite应用程序下的每一个子文件夹都是一个“虚拟目录”。

最顶层的虚拟目录称为“根虚拟目录”,图8‑2中Web应用程序HappyBookShopWebSite的根虚拟目录为“/HappyBookShopWebSite”。

下面逐个剖析这三个概念。

1网站(Web Site)网站是 Web 应用程序的容器,每个网站都有一个唯一的标识,这一标识由它的 IP 地址、端口和可选的主机头/主机名组合而成,Web服务器根据收到的HTTP请求中的这些信息来确定是对哪一个网站的请求。

在IIS 7中,将网站标识称为“网站绑定”,图 8‑3所示为IIS 7默认网站的“网站绑定”对话框。

图 8‑3 IIS7.0中的网站绑定2 Web 应用程序(Web Application)Web 应用程序是一种在应用程序池(Application Pool)[3]中运行并通过 HTTP 协议向用户提供信息服务(通常以HTML 格式表达信息)的软件程序。

创建 Web 应用程序时,Web 应用程序的名称将成为网站 URL 的一部分,用户可以通过 Web 浏览器发出针对该 URL的HTTP请求。

使用Visual Studio创建的“网站”,其实是一个“Web 应用程序”,它并不等于IIS中的“网站”。

在 IIS中,每个网站至少必须拥有一个 Web 应用程序(但不一定是应用程序,可以是其他类型的Web应用程序),它被称为“根Web 应用程序”或“默认 Web 应用程序”,除此之外,网站还可以包含一个或多个(或其他种类) Web 应用程序。

在Windows XP SP2中,使用Visual Studio创建的网站发布到本机IIS之后都是作为本机默认网站(即“localhost”所代表的网站)所承载的Web应用程序而运行的。

Windows Server和Vista可以为某个应用程序创建一个独立的IIS网站,此网站只承载这个唯一的应用程序,并且运行在一个独立的应用程序池中。

许多商业网站都采用这种方法以获取较高的性能,同时将此网站与Web服务器上承载的其他网站相互隔离,以增强Web服务器的安全性。

3 虚拟目录(Virtual Directory)虚拟目录是在 IIS 中指定并映射到本地或远程服务器上的物理目录的目录名称。

然后,此虚拟目录名称将成为 Web 应用程序 URL 的一部分,用户可以通过 Web 浏览器向IIS请求访问此URL所对应的物理目录中的资源。

在 IIS中,每个 Web 应用程序都必须拥有一个最顶层的虚拟目录,它被称为“根虚拟目录”。

在Visual Studio中,可以在属性窗口中直接设定网站的根“虚拟路径”(图 8‑4)。

图 8‑4 网站的虚拟路径但要注意,这里设定的“虚拟路径”是Visual Studio自带的轻量级Web服务器“ Development Server”的虚拟路径,而非IIS中的虚拟路径。

如果使用Visual Studio完整版本(比如团队开发版),则可以使用一个“发布网站”的功能。

在使用此功能发布网站时可以直接指定应用程序在IIS中所对应的根虚拟目录图 8‑5)。

图 8‑5 设定IIS中网站的根虚拟目录图 8‑5中将网站所对应的IIS根虚拟目录设为MyNewWebSite。

一个Web 应用程序可以拥有多个虚拟目录,这些虚拟目录都将成为Web 应用程序根虚拟目录的子目录。

可以很方便地在IIS中创建一个虚拟目录(图 8‑6)。

图 8‑6 在IIS 7中创建一个虚拟目录给Web应用添加完虚拟目录之后,可以通过以下URL访问虚拟目录中的网页http://网站名称/Web应用程序根虚拟目录/新创建的子虚拟目录/Web网页名称在上面的例子中,Web应用程序根虚拟目录为“/MyNewWebSite”,新加的虚拟目录为“MyNewVirtualDir”,它指向“D:\MyDir”目录。

现假设D:\MyDir目录中有一个网页(不妨设为Sample.aspx),则通过以下URL可以访问此网页:http://localhost/MyNewWebSite/MyNewVirtualDir/Sample.aspx--------------------------------------------------------------------------------[1] 建议在Windows 2003 Server上安装最新版本的.NET Framework以支持一些新技术,比如AJAX和Silverlight。

[2] 更具体来说,是Windows Server的一个系统核心组件:HTTP.SYS负责这一工作。

后面在介绍IIS架构时还将介绍HTTP.SYS组件。

[3]后文将应用程序池作更详细的介绍[4]“虚拟目录”有时又被称为“虚拟路径”,两者代表同一概念。

[5]对于Visual Web Developer速成版,它没有提供“发布网站”的功能,但可以在“复制网站”对话窗口找到相应的按钮完成这一工作。

或者更直接些,直接使用IIS管理器来完成这一工作。

[6]在IIS 5/6中使用“虚拟目录创建向导”来创建虚拟目录,其方法是在IIS的某个Web应用程序节点上右击,从快捷菜单中选“新建”-->“虚拟目录”命令。

IIS 7的操作是类似的,但它直接在快捷菜单的第一级中就提供了“添加虚拟目录”的命令。

8.1.2 应用程序池与工作者进程“应用程序池(Applicaion Pool)”是Windows Server为提升Web服务的性能和可靠性而引入的一个Web程序隔离机制。

一个应用程序池可包含一个或多个Web应用程序。

Web应用程序必须运行在一个应用程序池中。

在Windows Server中,一个或多个“工作者进程(Worker Process)”为应用程序池提供服务,停止一个应用程序池将导致这些工作者进程被关闭,这时,所有发往此应用程序池中Web应用程序的HTTP请求将收到“503服务不可用”的响应信息。

图 8‑7展示了一台Web服务器上正在运行的应用程序池。

图 8‑7 IIS 7中的应用程序池如图 8‑7所示,本台Web服务器上的设置了3个应用程序池,每个应用程序池中可运行多个Web应用程序,图中DefaultAppPool这一应用程序池运行了5个Web应用程序。

每个应用程序池都可以加载特定版本的.NET Framework,以对应用程序提供支持。

在IIS 7中,应用程序池有两种运行模式——经典模式和集成模式。

经典模式下,IIS7应用程序池运行方式同IIS 6 [1]。

集成模式下,IIS 7直接预装载.NET Framework,从而为应用程序提供了更好的性能。

在IIS管理器中可以随时启动和停止某个应用程序池。

Windows Server上运行应用程序池的系统帐号是“NetworkService”。

在后面的章节中可以看到在部署网站时往往需要给此帐号设置特定的权限(比如允许应用程序向某文件夹中添加文件)。

下面深入介绍一下IIS的系统架构以及Windows Server是如何响应HTTP请求的。

8.1.3 IIS的系统架构IIS 6(运行于Windows 2003 Server)的架构如图 8‑8所示。

图 8‑8 IIS 6的架构从图 8‑8中可以看到,IIS 6架构由以下几个部分组成:(1)HTTP.SYS:运行于Windows核心(Kernel)的一个组件,它负责侦听(Listen)来自于外部的HTTP 请求(通常来自网络中另一台计算机上的浏览器),根据请求的URL将其转发给相应的应用程序池,由运行于应用程序池中的工作者进程来响应此HTTP请求。

当此HTTP请求处理完成时,它又负责将处理结果发送出去(其接收者通常为发出HTTP请求的浏览器)。

为了提供更好的性能,HTTP.SYS内部建立了一个缓冲区,将最近的HTTP请求处理结果保存起来,如果发现某个HTTP请求“不久以前”处理过了(即在缓冲区中可以找到),它就简单地直接从缓冲区中取出这些结果发回给客户端(通常为发出HTTP请求的浏览器)。

(2)InetInfo:在IIS 5时代,InetInfo是IIS服务的主进程,在IIS 6中,它不再负责处理HTTP请求,但它继续负责管理除了WWW服务之外的其他互联网服务,比如用于文件传输的FTP服务和用于邮件收发的SMTP服务。

相关主题