IIS架构与HTTP请求处理流程

 

8.1.4 HTTP请求的处理过程

 

在了解了 IIS 的架构之后,来看一下 IIS 架构中的各个组成部分是如何相互配合 处理 HTTP 请求 的。

先来从总体上看看 HTTP 请求的处理过程( 8 ?10 )。

 

8 ? 10 HTTP 请求的处理过程

 

8 ?10 清晰地展示出了 HTTP 请求处理就是浏览器与 Web 服务器间“一问一答”的过程

首先,浏览器尝试连 接 Web 服务器的 80 端口,如果 Web 服务器可以响应此连接请求,就在浏览器 与 Web 服务器间 建立了一个通讯链路,在此“通道”上浏览器与 Web 服务器可以相互发送与接收信息。

假设浏览器向 Web 服务器发出一个读取某 ASP.NET 站点上的某个 ASPX 网页的请求。当此请求通过网络到达 Web 服务器时,此请求被 HTTP.SYS 组件所接收。 HTTP.SYS 系统组件会检查此 HTTP 请求的相关信息,根据其 URL 将此 HTTP 请求发送给运行在某个应用程序池中的 工作者进程处理。如果同时有多个针对此 ASP.NET 站点的 HTTP 请求, HTTP.SYS 会将这些请求排队,加入到对应的应用程序池的 HTTP 请求队列中等待。

如果这是第一个对 ASP.NET 站点的 HTTP 请求,工作者进程会加载 aspnet_isapi.dll ,并将请 求转给它, aspnet_isapi.dll 接着会装载 .NET CLR[1] 创 建一个针对此 ASP.NET 站点的应用程序域[2] ,然后启动一个复杂 的由多个步骤和组件参与的处理流程,当此处理流程结束,要发回给客户端的结果(通常是 HTML 代码,当然也可以是其他类型的资源,比如由程序动态生成的图片)已经生成,此结果被转发给 HTTP.SYS

注意: 对于以集成模式运行的IIS 7.NET CLR 在应用程序池一启动就自动装载,从而避免了临时装载CLR 的 花销。后继处理过程与IIS 6 基本一致。

HTTP.SYS 接收到请求的处理结果之后,将其缓存到缓冲区中,然后把处理结果发回给发出 HTTP 请求的浏览器。

       上述过程是对 IIS 处理 HTTP 请求全过程的粗略描述。 8.2 节将选取这个处理过程中的主要阶段,详细介绍针对 ASP.NET 网页的 HTTP 请求处理过程。

 


8.1.5 ISAPI扩展、ISAPI筛选器和程序映射

 

       IIS 的文档中经常会提到两个术语: ISAPI 扩展和 ISAPI 筛选器。

1 ISAPI 扩展

       ISAPI 扩展( ISAPI Extension ”是一 种可以添加到 IIS 中 以增强 Web 服务 器功能的程序,其载体为 DLL 文件。它通常直接负责响应 HTTP 请求。

       根据 HTTP 请求要访问的资源扩展名(通过 URL 获取), IIS 会选取特定的 ISAPI 扩展来处理这一请求,这一过程被称为“ 程序映射 而用于响应 HTTP 请求的这一 ISAPI 扩展被称为“ HTTP Handler HTTP 处理程序) ”。 8 ?11 展示了 IIS 6 中的程序映射。


 

 

 

8 ? 11 程序映射( IIS 6

 

       8 ?11 中可以看到, IIS 指定对 ASP.NET 网页(其扩展名为 .aspx )的请求将由 aspnet_isapi.dll 处理( 8 ?12 )。

 


 

8 ? 12 aspnet_isapi.dll 负责处理对 ASP.NET 网页的请求

 

       IIS 7 中的程序映射与 IIS 6 略有不同。当 IIS 7 以“经典模式”运行时,与 IIS 6 一样使用 aspnet_isapi.dll 响应针对“ .aspx ”的请求。但当 IIS 7 以“集成模式”运行时,则使用托管处理程序( System.Web.UI.PageHandlerFactory )响应针对“ .aspx ”的请求( 8 ?13 )。



 

 

8 ? 13 IIS 7 集成模式下的程序 映射

 

2 ISAPI 筛选器

       “ISAPI筛选器(ISAPI Filter 也 是一种 DLL ,但 它不负责生成 HTTP 请求,它的主要作用是响应某些特定的事件。当这些事件发生时 ISAPI 筛选器被调用,它可以修改传入或传出的 HTTP 数据。

IIS 7 中,使用“ HTTP 模块(HTTP Module 取代了 传统 ISAPI 筛 选器的功能。

注意: ISAPI 扩展与ISAPI 筛选器名字很相近,但其 在IIS 中的地位和所起的作用是不同的。



 [1]CLR Comon Language Runtime ):通用语言运行时,是 .NET 的核心,可以将其看成是一台虚拟的专 用于运行 .NET 程 序的计算机。

[2]应用程序域( Application Domain ): .NET 引入的一种代码隔离机制,一个托管 进程可以拥有多个应用程序域,在应用程序域中可以装载程序集,创建特定类型的对象,调用对象的方法。

摘自:http://www.code-design.cn/blogdetail1369.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值