asp.net HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。

原创 2004年08月11日 16:26:00

了解当用户对一个.aspx页面提出请求时,后台的Web服务器的动作流程。当对这个流程了解后,我们就会明白HttpHandler和HttpModule的作用了。

首先,来了解一下IIS系统。它是一个程序,负责对网站的内容进行管理,以及对客户的请求(就是Http请求)做出反应。当用户对一个页面提出请求时,IIS做如下反应(忽略权限):
1.把对方请求的虚拟路径转换成物理路径
2.根据物理路径搜索请求的文件
3.找到文件后,获取文件的内容
4.生成Http头信息。
  PS:关于IIS和IE生成的Http头信息(元数据),可以用这个工具:http://www.blunck.info/iehttpheaders.html,它是IE的一个插件,专门查看头信息的。
5.向客户端发送所有的文件内容:首先是头信息,然后是Html内容,最后是其它文件的内容。
6.客户端IE浏览器获得信息后,解析文件内容,找出其中的引用文件,如.js .css .gif等,向IIS请求这些文件。
7.IIS获取请求后,发送文件内容。
8.当浏览器获取所有内容后,生成内容界面,客户就看到图像/文本/其它内容了。

但是IIS有个缺点,即它仅仅支持静态html页面的内容,就是说,他只能分析如.htm,.html这样的文件内容。像一些动态内容的页面,含有服务器端操作代码的页面类型,如.asp,.aspx,.cgi,.php等,IIS不认识这些专用的标记,它就会把它当作文本,丝毫不做处理发送到客户端。

为了解决这个问题。IIS推出了一种机制,叫做ISAPI的开放扩展,这个东西是一个标准组件(COM组件),他是一个过滤器+跳转程序,如果安装了专门的扩展,那么在访问IIS所不能处理的文件时,如.asp和.aspx文件,IIS就会在自己的进程里面启动这个扩展。刚才说了,ISAPI首先是个过滤器,他在注册到IIS的时候,会把每个扩展可以处理的文件扩展名注册到IIS里面。扩展启动后,就根据定义好的方式来处理IIS所不能处理的文件,然后把控制权跳转到专门处理代码的进程中。让这个进程开始处理代码,生成标准的HTML代码,生成后把这些代码加入到原有的Html中,最后把完整的Html返回给IIS,IIS再把内容发送到客户端。

我拿一个请求asp.net页面的执行步骤说明:
1 客户端IE浏览器通过Http协议向一个Web服务器提出请求,如
  http://www.microsoft.com/china/msdn/default.mspx

2 当请求到达时,IIS 检查资源类型(就是检查请求文件的扩展名,发现不是自己所能处理的),就调用 ASP.NET ISAPI 扩展。如果启用了默认的进程模型,aspnet_isapi 会将请求排队,并将请求分配给辅助进程。所有的请求数据都通过异步 I/O 发送。如果启用了 IIS 6 进程模型,请求将自动在辅助进程 (w3wp.exe) 中排队,此辅助进程用于处理应用程序所属的 IIS 应用程序池。IIS 6 辅助进程不了解 ASP.NET 和托管代码的任何情况,它只是处理 *.aspx 扩展并加载 aspnet_isapi 模块。当 ASP.NET ISAPI 在 IIS 6 进程模型中运行时,它的工作方式有所不同,仅在 w3wp.exe 辅助进程的上下文中加载 CLR。

3 收到请求后,ASP.NET 辅助进程将通知 ASP.NET ISAPI,它将为请求服务。通知通过同步 I/O 实现。之所以使用同步模型,是因为请求只有在 ISAPI 内部请求表中被标记为“executing”,辅助进程才能开始处理它。如果请求已经由特殊的辅助进程进行处理,则不能再将它指定到其他进程,除非原始进程已取消。

4 完成后,响应被发送到打开了异步管道的 aspnet_isapi。现在,请求的状态变为“Done”,之后将从请求表中被删除。如果辅助进程崩溃,正在处理的所有请求仍将保持“executing”状态并持续一段时间。如果 aspnet_isapi 检测到辅助进程已取消,它将自动终止请求并释放所有相关的 IIS 资源。

5 最后,ISAPI获取了响应(就是经过asp.net运行库所处理后的html内容)后,把响应返回给IIS,IIS将继续处理它的内容,解析所需相关文件,并且把所有的数据发送给客户端。然后关闭连接。


从上面的叙述可以知道,最终要的步骤是Asp.net处理的那一段过程,就是当asp.net的ISAPI启动处理进程后发生了什么事

Asp.Net底层解析(四)——应用程序生命周期与HttpModule

前言:一般ASP.NET开发者对页面生命周期(PageLife Cycle)是比较熟悉的,在开发ASP.NET应用程序中经常需要从页面周期的角度去思考问题。实际上在页面生命周期的背后,还存在着一个不太...
  • mlcactus
  • mlcactus
  • 2013年02月01日 23:21
  • 1756

Asp.Net请求处理过程

一.浏览器发出访问某ASP.NET网页的HTTP请求 假设这个请求是针对此网页所属的ASP.NET应用程序的第一次请求。当此请求到达Web服务器时,由HTTP.SYS(windows操作系统上的一个...
  • T_Twory
  • T_Twory
  • 2016年05月12日 10:38
  • 790

ASP.NET请求处理过程

Asp.Net构架(Http请求处理流程) - Part.1 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net。他们耐心、细致地告...
  • u013516966
  • u013516966
  • 2015年07月23日 11:17
  • 916

ASP.NET 重定向三种方法

1.Server.Transfer(“newPage.aspx”): 服务器停止解析本页,保存此页转向前的数据后,再使页面转向到newPage.aspx, 并将转向前数据加上newPage.aspx...
  • master_Kong
  • master_Kong
  • 2016年02月23日 15:06
  • 1779

Asp.net Mvc4 使用Cas单点登录

因项目需要,使用了耶鲁大学的Cas单点登录方案,在java中使用一直正常,但是在.Net中碰到了循环重定向的问题,反复测试后,总算解决了,最终的配置如下: xml version="1.0"...
  • mysouling
  • mysouling
  • 2016年06月21日 20:33
  • 1691

Http 请求处理流程

引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net。他们耐心、细致地告诉你如何一步步拖放控件、设置控件属性、编写CodeBehind代码,以实现某个特...
  • u011966339
  • u011966339
  • 2017年03月08日 13:55
  • 543

asp.net HTTP请求过程

.NET平台处理HTTP请求的过程大致如下:1 IIS得到一个请求;2查询脚本映射扩展,然后把请求映射到aspnet_isapi.dll文件3代码进入工作者进程(IIS5里是aspnet_wp.exe...
  • zxxSsdsd
  • zxxSsdsd
  • 2016年07月14日 15:35
  • 1395

asp.net 请求、处理、响应原理浅析

作为一名asp.net开发人员,不了解asp.net该是一件多么可怕的事。当然,如果你对asp.net原理不了解也是可以做项目的,可你要想继续提升自己,拿高工资,实在就有点难了。 于是乎,为了追求自己...
  • ydm19891101
  • ydm19891101
  • 2016年03月07日 18:48
  • 4171

关于asp.net三种重定向方法的总结

转自:http://blog.csdn.net/ldneedu/article/details/5796579 asp.net三种重定向方法的总结 (1)Server.Tran...
  • jane007123
  • jane007123
  • 2016年02月12日 16:21
  • 2208

Asp.net 学习之路---Http协议

Http协议,是请求(request)/响应(response)模式。客户端(浏览器)向服务器发送请求,由服务器向客户端响应回复。 Http协议的优点协议简单、响应速度快;缺点是没有记忆能力,对事务处...
  • xiangguo886
  • xiangguo886
  • 2015年11月11日 16:02
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。
举报原因:
原因补充:

(最多只允许输入30个字)