IIS架构与HTTP请求处理流程(3)

原创 2008年09月29日 10:51:00

 

ASP.NET Web编程原理 之

IIS架构与HTTP请求处理流程(3)

续前文

 

8.1.4 HTTP请求的处理过程

 

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

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

 http请求处理过程

810 HTTP请求的处理过程

 

810清晰地展示出了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 HandlerHTTP处理程序)”。 811展示了IIS 6中的程序映射。


程序映射

 

811 程序映射(IIS 6

 

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

 

编辑映射

812 aspnet_isapi.dll负责处理对ASP.NET网页的请求

 

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



 IIS7下的程序映射

813 IIS 7集成模式下的程序映射

 

2 ISAPI筛选器

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

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

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


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

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



*********************************************************

下一部分,将在本部分所介绍内容的基础上,详细介绍与ASP.NET开发密切相关的“ASP.NET请求处理管线(HTTP Pipe Line)”

IIS是如何处理ASP.NET请求的

英文原文:Beginner’s Guide: How IIS Process ASP.NET Request   前言   每次服务器接受到请求,都要先经IIS处理。这不是一篇描述AS...
  • Linux7985
  • Linux7985
  • 2015年03月05日 11:12
  • 5939

Spring MVC 的http请求处理过程

Spring3.2请求处理大致过程 处理过程 初始化: DispatcherServlet.onRefresh()DispatcherServlet.initStrate...
  • he90227
  • he90227
  • 2016年08月22日 10:25
  • 2619

Nginx中http请求的处理过程

1.补充点: 如果不指定ngx_http_core_loc_conf_t ->handler,那么请求转发到默认的content phase中的handler(如ngx_http_ind...
  • eric_za
  • eric_za
  • 2014年12月25日 17:22
  • 2558

IIS架构与HTTP请求处理流程(2)

IIS架构与HTTP请求处理流程(2) (续上文) 8.1.2 应用程序池与工作者进程        “应用程序池(Applicaion Pool)”是Windows...
  • vjo6n4ylg
  • vjo6n4ylg
  • 2015年01月27日 20:32
  • 185

[Django架构流程分析]Django HTTP请求的处理流程

注:以下内容转载自 现代魔法学院 网站的 Django HTTP请求的处理流程 一文,仅供学习使用。         Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Djang...
  • dapeng0802
  • dapeng0802
  • 2015年11月15日 21:53
  • 516

Http请求处理流程.doc

  • 2009年03月06日 15:43
  • 202KB
  • 下载

Http请求处理流程

  • 2011年05月12日 09:41
  • 663KB
  • 下载

Asp.Net构架(Http请求处理流程)

我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net。他们耐心、细致地告诉你如何一步步拖放控件、设置控件属性、编写CodeBehind代码,以实现某个特定的功能...
  • u013948191
  • u013948191
  • 2015年07月05日 10:09
  • 279

Asp.Net构架(Http请求处理流程) - Part.1

引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net。他们耐心、细致地告诉你如何一步步拖放控件、设置控件属性、编写CodeBehind代码,以实现某个特...
  • byondocean
  • byondocean
  • 2011年04月12日 21:16
  • 431

Http 请求处理流程

http://www.tracefact.net/Asp-Net-Architecture/Http-Request-Processing-Flow.aspx 引言我查阅过不少Asp.Net的书籍,发...
  • plean
  • plean
  • 2011年05月16日 11:38
  • 296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IIS架构与HTTP请求处理流程(3)
举报原因:
原因补充:

(最多只允许输入30个字)