从一个页面比如www.cnblogs.com的请求开始如何就能打开cnblogs页面的呢?这其中发生了什么样的东西?

Http请求(Http Request)

当服务器(IIS)接受到一个Http请求的时候进行以下步骤的处理:

1)服务器获取所请求的页面的后缀名(因为可能是.ASPX,.JPG等不仅仅是ASPX页面)

2)服务器会寻找处理该后缀名的应用程序,如果服务器没有找到这类的后缀名处理程序,并且这个文件也不是受保护的那么将直接返回给客户端。

3)能够处理这类后缀名的应用程序叫做ISAPI应用程序(Internet Server Application Programe Interface),他实际上时一个接口,起到一个代理的作用,主要就是把对应的请求映射到相对应的实际处理程序上去。当一个请求找到一个对应的ISAPI那么他就执行把该请求交给对应的ISAPI进行处理。

我们所常用的.aspx文件是由aspnet_isapi.dll这个程序来处理的。ASP.NET只是IIS的一个组成部分,他是ISAPI的一个扩展而已不是全部。

Http.SYS

那么IIS是如何获取外部的HTTp请求的呢?这个就要依靠HTTP.SYS这个驱动程序了。

1)在操作系统启动的时候,IIS会在HTTP.SYS中注册自己的虚拟路径

2)当一个请求时一个可访问的URL,那么HTTP.SYS就会将这个请求交给IIS工作者进程。(IIS6.0,7.0是W3WP.EXE,5.0是aspnet_wp.exe).每个工作者进程都有一个身份标示,以及一系列的可选参数(比如回收机制的设置,超时设置等)

3)就是执行上面ISAPI所说的过程了。

从上面可以看出HTTP.SYS是一个内置的驱动程序,他是用来监听外部对IIS的请求的。

4)ISAPI除了进行程序映射外还进行一些其他的操作,从HTTP.SYS中获取当前HTTP请求信息,并且将这些信息保存到HttpWorkerRequest类中,在相互隔离的AppDamain中加载HttpRuntime,调用HttpRuntime的ProcessRequest方法。

5)然后就执行我们程序员所写的代码了

6)IIS接受返回数据流,并且重新返回给HTTP.SYS,最后HTTP.SYS再将这些数据返回给客户端浏览器。

HTTP管道(Pileline)

当一个Http请求到达程序后事怎么处理的呢?

当Http请求进入到Asp.net Runtime以后,它由托管模块(HttpModule)和处理程序(HttpHandler)组成,并且由管道来处理这个Http请求。

04

整个数据的流动如图所示:

1)HttpRuntime将Http请求转交给HttpApplication(代表着我们创建的web应用程序)。HttpApplication创建针对此Http请求的HttpContext上下文对象用来保存请求的其他对象比如HttpRequest,HttpResponse,HttpSessionState.

2)Http请求通过一系列的Module,这些Module对这个Request具有完全控制权限。然后做一些某个具体Handler之前的事。

3)Http请求经过所以的HttpModule之后就被HttpHandler处理。

4)然后再返回给HttpModule做一些某个具体Handler之后的事

posted on 2010-03-19 20:46  tedyding  阅读(3304)  评论(0编辑  收藏  举报