`
wodamazi
  • 浏览: 1438955 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

ASP.NET Web编程原理 之

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

续前文

8.1.4 HTTP请求的处理过程

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

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

http请求处理过程

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1028" style="width: 415.5pt; height: 180pt;" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.emz"></imagedata></shape> 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中的程序映射。


程序映射

<shape id="图片_x0020_8" style="visibility: visible; width: 301.5pt; height: 329.25pt;" type="#_x0000_t75" alt="IIS2" o:spid="_x0000_i1025"><imagedata o:title="IIS2" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image002.jpg"><font size="3" color="#000000"></font></imagedata></shape>

811 程序映射(IIS 6

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

编辑映射

<shape id="图片_x0020_9" style="visibility: visible; width: 302.25pt; height: 170.25pt;" type="#_x0000_t75" alt="无标题" o:spid="_x0000_i1026"><imagedata o:title="无标题" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.png"><font size="3" color="#000000"></font></imagedata></shape>

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下的程序映射

<shape id="图片_x0020_4" style="visibility: visible; width: 248.25pt; height: 221.25pt;" type="#_x0000_t75" o:spid="_x0000_i1027"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image004.png"><font size="3" color="#000000"></font></imagedata></shape>

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)”

分享到:
评论

相关推荐

    Http请求处理流程

    HTTP请求处理流程是Web开发中的核心概念,它涉及到服务器如何响应客户端(如浏览器)发起的HTTP请求。在深入了解Form验证模式和Windows验证模式之前,理解HTTP请求处理流程至关重要。这里我们将详细探讨这一流程,...

    IIS精典模式托管管道架构图

    总的来说,IIS经典模式托管管道架构是理解Web服务器如何处理请求和响应的重要概念,它对维护和开发基于IIS的Web应用具有指导意义。随着技术的发展,尽管新的模式和架构不断出现,但经典模式仍然是理解和学习IIS基础...

    各版本IIS下ASP.net请求处理过程分析第1/3页

    IIS6的请求处理流程包括: 1. http.sys接收到一个基于aspx的HTTP请求后,首先根据IIS的Metabase来确定该请求对应的Application属于哪个Application Pool。 2. 如果Application Pool尚未存在,则会创建它。如果已经...

    各版本IIS下ASP.net请求处理过程区别第1/3页

    IIS6的架构改进还包括了对请求处理流程的优化。例如,它改进了*** ISAPI的工作方式,减少了进程间通信的次数,提高了处理性能。另外,IIS6引入了对已损坏请求的自我恢复机制,即如果请求处理过程中出现错误,IIS可以...

    ASP.NET构架与安全机制之Http请求处理

    ASP.NET架构与安全机制之Http请求处理涉及到Web应用程序的核心运行机制和安全性措施。在这个主题中,我们将深入探讨ASP.NET框架如何处理HTTP请求,以及在安全方面如何确保用户身份验证和授权。 首先,让我们理解...

    Windows Server 2008应用程序架构-第01部分 IIS 7.0 概览、IIS 组件、IIS 7.0 性能调优

    为了提高性能,IIS 7.0允许开发者进行内核级别的自定义开发,通过优化请求处理流程来提升服务器响应速度。此外,IIS 7.0还提供了一系列强大的诊断和纠错工具,帮助管理员监控服务器性能,定位并解决潜在问题。例如,...

    asp.net架构基础知识--asp.net请求的处理过程

    ASP.NET架构基础知识主要涵盖Web应用程序如何通过ASP.NET框架进行处理,特别是关于ASP.NET请求的处理过程。这个过程涉及多个步骤,从用户发起请求到服务器返回响应。以下将详细阐述这一流程。 1. **请求到达**: 当...

    IIS6、IIS7和IIS8各版本的差别是什么?.docx

    在IIS6中,请求的处理流程如下: 1. **请求处理**:所有HTTP请求首先被HTTP.sys驱动程序捕获,然后根据Metabase(IIS的元数据库)查找请求对应的应用程序池。如果应用池不存在,IIS会自动创建。 2. **应用程序池与...

    IIS原理[归纳].pdf

    在IIS6中,请求处理流程有所不同。InetInfo.exe负责监听和分发请求到Work Process,而在IIS7及更高版本中,请求处理模型进行了重大改进,采用了更模块化的设计,允许更细粒度的控制和更高的性能。 总结来说,IIS...

    网上超市开发流程3程架构编写

    网上超市开发流程是一个涵盖多个技术层面的复杂项目,主要涉及前端用户界面设计、后端数据库管理、业务逻辑处理以及系统架构构建。以下是对这个项目的详细分析: 首先,我们需要理解网上超市的基本架构。一个完整的...

    构建高性能.NET 应用之配置高可用IIS 服务器

    通过深入理解IIS架构、工作原理以及各项配置选项,开发者可以更好地构建和优化IIS宿主环境,提升应用程序性能,并确保应用能够应对大规模访问的压力。在实际操作过程中,还需要结合具体的应用场景和性能测试结果,...

    C#建立最简单的Web服务,无需IIS

    3. **处理请求**:通过循环调用HttpListener的GetContext()方法,获取请求上下文。一旦有请求到达,该方法将阻塞,直到请求到达。 4. **定义回调**:定义处理请求的回调函数。在这个函数中,你可以解析请求内容,...

    IIS 200804091iis51.rar

    4. **HTTP管道**:IIS 7.0改进了HTTP请求处理流程,提供了更高效、可扩展的请求管道模型。 5. **FastCGI支持**:增强了对FastCGI的支持,可以更好地运行PHP等脚本语言,从而能够托管WordPress、Drupal等开源内容...

    IIS.rar_iis

    1. **IIS架构**:了解IIS的工作原理,包括请求处理流程、模块系统和配置结构。 2. **ARM架构**:理解ARM7的指令集、内存管理、中断处理等基础知识,以便于在该平台上编写和优化代码。 3. **嵌入式编程**:学习如何...

    深入解析ASP.NET架构

    深入理解ASP.NET架构,尤其是其请求处理流程、HttpModule与HttpHandler的运用,以及事件模型机制,对于开发高性能、高可用性的Web应用至关重要。通过掌握这些核心概念,开发者可以更好地设计、调试和优化ASP.NET应用...

Global site tag (gtag.js) - Google Analytics