HTTP请求的处理
当客户端向web服务器请求一个*.aspx的页面文件时,这个http请求被inetinfo.exe进程截获(www服务),它判断文件后缀之后,把这个请求转交给ASPNET_ISAPI.DLL(位于<.NET FrameworkDir>\aspnet_isapi.dll),而ASPNET_ISAPI.DLL则会通过一个Http PipeLine的管道(HTTP管道流过的是Http Context对象,HttpContext,里面包含着Request,Response,Application,Server,Session等表示状态的对象。其实,HttpContext本身也表示一种状态,它还有两个很重要的属性,Current和Items,前者用来代表自己,后者是可以存储任何对象的集合),将这个http请求发送给ASPNET_WP.EXE进程,当这个HTTP请求进入ASPNET_WP.EXE进程之后,asp.net framework就会通过HttpRuntime来处理这个Http请求,处理完毕后将结果返回给客户端。
当一个http请求被送入到HttpRuntime之后,这个Http请求会继续被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication(Http管道的事件控制器)实例来处理传递进来的http请求,而后这个Http请求会依次进入到如下几个容器中:
HttpModule(实现拦截请求,包括身份验证、授权、缓存、及进程外会话状态管理,不交给http handler去处理,实现“过滤”的功能,) --> HttpHandler Factory --> HttpHandler(它仅仅包含一个ProcessRequest()方法和一个IsReusable属性,但关键点是通过ProcessRequest()可以得到一个HttpContext对象的实例,并且明白这个单独的方法可以从开始到结束负责处理一个Web请求,HttpHandler是处理请求机制的核心,在这里任意的应用程序级的代码被执行。记住,ASP.NET的页面和Web Service都是HttpHandler的具体实现。)
当系统内部的HttpHandler的ProcessRequest方法处理完毕之后,整个Http Request就被处理完成了,客户端也就得到相应的东东了。
完整的http请求在asp.net framework中的处理流程:
HttpRequest-->inetinfo.exe->ASPNET_ISAPI.DLL-->Http Pipeline-->ASPNET_WP.EXE-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()
浙公网安备 33010602011771号