图4.1.1ASP时代处理HTTP请求其实ASP.DLL是一个依附在IIS的ISAPI文件,它负责了对诸如ASP文件ASA文件等等的解释执行,我们可以在IIS配置选项看到它是如何配置的:
第四章
ASP.NETFramework深度历险
5
图4.1.2
ISAPI配置
通过图4.1.2,我们可以看到红色标记的部分,它清楚的告诉我们IIS会将对.asp以及.asa等文件的HTTP请求转交给asp.dll这个ISAPI文件来处理.在古老的ASP时代,针对这些asp等文件的HTTP请求被asp.dll所截获,从而被解释执行.真是由于解释执行,每一次处理这些文件都是从头来过进行一番痛苦的解释才能执行使得IIS在处理大流量的HTTP请求的时候并不是得心应手,这也是ASP时代最大的弊端.4.1.2ASP.NET时代的HTTP请求处理方式看完了远古时代ASP的HTTP请求处理方法,转过头来我们看看如今的ASP.NETFramework是如何处理一个HTTP请求的.当客户端向WEB服务器请求一个*.aspx文件的时候,ASP类似,同这个HTTP请求也会被inetinfo.exe进程(因为它就是WWW服务)截获,它判断文件的后缀之后,将这个请求转交给ASPNET_ISAPI.dll,ASPNET_ISAPI.dll则会通过而一个被称为HttpPipeLine的管道,将这个HTTP请求发送给ASPNET_WP.exe进程,当这个HTTP请求进入ASPNET_WP.exe进程之后,ASP.NETFramework就会通过HttpRuntime来处理这个HTTP请求,处理完毕将结果返回客户端.
6}
第四章
ASP.NETFramework深度历险
(3710167@qq.com)
接下来我们同样来看看一个描述ASP.NETFramework是如何处理HTTP请求的图示:
图4.1.3ASP.NETFramework处理HTTP请求通过上面的图我们可以清楚的了解到ASP.NETFramework是如何接收,处理一个HTTP请求的完整过程.不过,也许有些读者在看完上面的图示之后就会有这样的疑问了:ASP.NETFramework处理一个HTTP请求的流程和以前的ASP时代好像并没有太大的改进啊.不要着急,在ASP.NETFramework中我们甚至能够了解到HttpRuntime的细节.接下来我们继续在ASP.NETFramework的世界深入历险下去.继续深入的第一步当然是要到HttpRuntime的世界瞧一瞧了.4.1.3深入ASP.NETFrameworkHTTP运行时在本节我们会一同看看HTTP运行时内部的一些东西.当一个HTTP请求被送入HttpRuntime之后,这个HTTP请求会继续被送入到一个被称之为HttpApplicationFactory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理传递进来的HTTP请求,而后这个HTTP请求会依次进入如下几个容器中:HttpModuleHttpHandlerFactoryHttpHandler当
系统内部的HttpHandler的ProcessResquest方法处理完毕之后,整个HttpRequest就被处理完成了,客户端也就得到相应的东东了.ASP.NETFramework处理HTTP请求的流程示意图如下:
第四章
ASP.NETFramework深度历险
7
图4.1.4现在我们可以整理一下完整的一个HTTP请求在ASP.NETFramework下是如何被处理的:HttpRequestinetinfo.exeASPNET_ISAPI.dllHttpPipelineASPNET_WP.exeHttpRuntimeHttpApplicationFactoryHttpApplicationHttpModuleHttpHandlerFactoryHttpHandlerHttpHandler.ProcessRequest()读者或许会问,我知道这个HTTP请求处理流程有什么用处呢?当然有用了,比如如果你想要中途截获一个HttpRequest并且做些自己的处理,该如何做呢?通过仔细的对上面图示的观察,读者应当知道能够在什么地方截获到这个HTTP请求.对,就是在HTTPRuntime运行时内部来做到这一点的,确切的说,是在HttpModule这个容器中做到这一点的.既然已经进入了神奇的HttpRuntime内部世界,我们当然要多看几眼了,接下来我们会继续我们的历险步伐,向HttpModule容器进军!
8}
第四章
ASP.NETFramework深度历险
(3710167@qq.com)
4.2,ASP.NET
Framework深度历险–HttpModule是如何工作的?
我们已经知道HttpModule容器是一个HTTP请求的必经之路,而我们在此小节的任务就是在HttpModule的内部深入看个究竟.4.2.1HttpModule在ASP.NETFramework中的位置我们上回说到,一个来自于客户端的HTTP请求被截获后经过层层转交(怎么都在踢皮球?呵呵)到达了HttpModule这个"请求监听器".HttpModule就类似于安插在ASPNET_WP.EXE进程中的一个窃听器,稍微有些常识的人都会很自然的想象得到窃听器是用来做什么的,而我们的HttpModule可以说是作窃听器的绝好人选了,但是需要明确的是,HttpModule绝对不是简单的监听器,它可以做到更多的东西,比如它可以对截获的请求增加一些内容等等.那么HttpModule在整个ASP.NETFramework中的位置处在哪里呢?下面我们通过图示来看看: