`
izuoyan
  • 浏览: 8916994 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    Web安全深度剖析(张柄帅)

    第2章 深入HTTP请求流程 6 2.1 HTTP协议解析 6 2.1.1 发起HTTP请求 6 2.1.2 HTTP协议详解 7 2.1.3 模拟HTTP请求 13 2.1.4 HTTP协议与HTTPS协议的区别 14 2.2 截取HTTP请求 15 2.2.1 Burp Suite Proxy 初体验 15 ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    2.4.3 事件如何与事件处理程序连接 2.5 Web项目 2.5.1 基于项目的开发 2.5.2 创建Web项目 2.5.3 迁移旧版Visual Studio创建的网站 2.6 Visual Studio调试 2.6.1 单步调试 2.6.2 变量监视 2.6.3 ...

    网络安全方面的论文.doc

    国际标准化组织(ISO)将"计算机安全"定义为:"为数据处理系统建 立与采取的技术与管理的安全保护,保护计算机硬件、软件数据不因偶然与恶意的原因而 遭到破坏、更改与泄漏",上述计算机安全的定义包含物理安全与逻辑安全...

    ASP.NET4高级程序设计(第4版) 3/3

    2.4.3 事件如何与事件处理程序连接 46 2.5 Web项目 47 2.5.1 基于项目的开发 47 2.5.2 创建Web项目 48 2.5.3 迁移旧版Visual Studio创建的网站 49 2.6 Visual Studio调试 51 2.6.1 单步调试 52 2.6.2 ...

    亮剑.NET深入体验与实战精要3

    7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web Service的安全 299 7.9.1 通过SoapHeader来增强 Web Service的安全性 299 7.9.2 采用SSL实现加密传输 302 7.9.3 访问...

    亮剑.NET深入体验与实战精要2

    7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web Service的安全 299 7.9.1 通过SoapHeader来增强 Web Service的安全性 299 7.9.2 采用SSL实现加密传输 302 7.9.3 访问...

    Web系统与技术 课程教材

    8.1.2 IIS的ASP.net 请求处理过程... 249 8.1.3 ASP.NET 页面生命周期... 252 8.2 ASP的常用控件... 252 8.2.1 HTML 服务器控件概述... 253 8.2.2 ASP 的标准服务器控件概述... 254 8.3 ASP的常见内置对象... ...

    asp.net知识库

    Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet ...

    ASP.NET3.5典型模块开发源代码

    12.3.3 在IIS中配置图片的特殊处理程序 145 12.3.4 测试处理程序的执行效果 147 12.4 防盗链下载实例 147 12.5 小结 149 第13章 在线客服模块 150 13.1 概述 150 13.2 QQ网站提供的在线客服 151 ...

    超级有影响力霸气的Java面试题大全文档

     Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    java 面试题 总结

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    asoft签到管理系统tykq3.5_build20110125

    3、万众期待的请假流程无限级自定义诞生了,并且,请假流程会根据申请人权限自动省略不必要的步骤(比如说部长的申请单无需组长进行第一审批了,即使该部门的请假流程存在组长这一级审批) 4、调整休假设定、批量...

    net学习笔记及其他代码应用

    Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥) 20.什么是Code-Behind技术? 答:代码后植。 21.在.net中,配件的意思是? 答:程序集。(中间语言,源数据,资源,装配清单) 22.常用的调用...

Global site tag (gtag.js) - Google Analytics