ASP.NET内部原理(HttpHandler和HttpModule)

  在以前的ASP时候,当请求一个*.ASP页面文件的时候,这个HTTP请求首先会被一个名为iNETinfo.exe进程所截获,这个进程实际上就是www服务。截获之后它会将这个请求转交给ASP.dll进程,这个进程就会解释这个ASP页面,然后将解释后的数据流返回给客户端浏览器。其实ASP.DLL是一个依附在IIS的ISAPI文件,它负责了对诸如ASP文件,ASA等文件的解释执行,
-------------------------------------
ASP.NET的HTTP请求处理方法
  当客户端向web服务器请求一个*.ASPx的页面文件时,同ASP类似,这个http请求也会被iNETinfo.exe进程截获(www服务),它判断文件后缀之后,把这个请求转交给ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL则会通过一个Http PipeLine的管道,将这个http请求发送给ASPNET_WP.EXE进程,当这个HTTP请求进入ASPNET_WP.EXE进程之后,ASP.NET framework就会通过HttpRuntime来处理这个Http请求,处理完毕后将结果返回给客户端。
------------------------------------
  当一个http请求被送入到HttpRuntime之后,这个Http请求会继续被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理传递进来的http请求,而后这个Http请求会依次进入到如下几个容器中:
  HttpModule --> HttpHandler Factory --> 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()

  如果想在中途截获一个httpRequest并做些自己的处理,就应该在HttpRuntime运行时内部来做到这一点,确切的说时在HttpModule这个容器中做到这个的。
----------------------------------------
  系统本身的HttpModule实现一个IHttpModule的接口,当然我们自己的类也能够实现IHttpModule接口,这就可以替代系统的HttpModule对象了。

ASP.NET系统中默认的HttpModule:

  DefaultAuthenticationModule 确保上下文中存在 Authentication 对象。无法继承此类。
  FileAuthorizationModule 验证远程用户是否具有访问所请求文件的 NT 权限。无法继承此类。
  FormsAuthenticationModule 启用 ASP.NET 应用程序以使用 Forms 身份验证。无法继承此类。
  PassportAuthenticationModule 提供环绕 PassportAuthentication 服务的包装。无法继承此类。
  SessionStateModule   为应用程序提供会话状态服务。
  UrlAuthorizationModule   提供基于 URL 的授权服务以允许或拒绝对指定资源的访问。无法继承此类。
  WindowsAuthenticationModule 启用 ASP.NET 应用程序以使用 Windows/IIS 身份验证。无法继承此类

--------------------------------------
  这些系统默认的HttpModule是在文件machine.config中配置的,和我们开发时使用到的web.config的关系是:是在ASP.NET FRAMEWORK启动处理一个Http Request的时候,它会依次加载machine.config和请求页面所在目录的web.config文件,如果在machine中配置了一个自己的HttpModule,你仍然可以在所在页面的web.config文件中remove掉这个映射关系。

Code

NET技术ASP.NET内部原理(HttpHandler和HttpModule),转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。