Asp.net底层探秘之Http请求机制

来源:互联网 发布:远古大洪水 知乎 编辑:程序博客网 时间:2024/05/16 00:49

Http在.net frameword中处理流程如下:

HttpRequest - > inetinfo.exe ->aspnet_isapi.dll

-> Http Pipeline -> ASPNET_WP.EXE

-> HttpRuntime -> HttpApplication Factory -> HttpApplication

-> HttpModule--> HttpHandler Factory -> HttpHandler

-> HttpHandler.ProcessRequest()

下面且听细细说来,

当客户端向web服务器请求 *.aspx页面时,这个http 被inetinfo.exe 进程截获,判断文件的后缀名后,由aspnet_isapi.dll(本人计算机物理路径C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727) asp.net_isapi.dll通过Http Pieline管道,将这个Http 请求发送给aspnet_wp.ext进程,进入进程后,由.net framework 通过HttpRunTime来处理http请求。当http请求进入HttpRunTime后,会被送入一个HttpApplication Factory 容器  这个容器会给出一个HttpApplication实例来处理Http请求,之后依次进去其余的容器

 

重点介绍 HttpModule和HttpHandler

 

HttpModule

主要被用于在最开始的阶段处理一个请求以及在最后阶段处理一个响应。 一个Http请求在被ASP.NET Framework捕获之后会依次交给HttpModule以及HttpHandler来处理。hm与hh之间不是完全独立的,实际上,http请求在hm传递的过程中会在某个事件内将控制权转交给hh的,而真正的处理在HttpHandler中执行完成后,HttpHandler会再次将控制权交还给HttpModule
上面的代码中的HttpModule的Init()中的参数是HttpApplication类型,它具有许多事件,包括BeginRequest,EndRequest,AuthentiacteRequest 等等。

实例代码如下:

在网站目录下,新建一个类


aspx后台代码

在web.config配置

 

最后结果输出 a

 

HttpHandlers

处理对某种特定文件或者在URL中对某个文件路径的请求。

 

示例代码如下:

新建类继承IHttpHandler

在web.config配置如下

 

最后请求.aspx文件都是输出aaa .