`

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

阅读更多

了解当用户对一个.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架构详解HttpHandler和HttpModule高清PDF文字版

    本书详细讲解了ASP.NET请求流程.以及核心对象. ASP.NET架构详解HttpHandler和HttpModule高清PDF文字. 我身边的ASP.NET工程师都看过这个啦

    介绍Asp.net HttpModule

    asp.net程序员有必要熟悉asp.net原理.介绍HttpModule 有源码有注释.

    HttpModule二级域名 C#.Net实例代码

    HttpModule二级域名 ----------- C#.Net实例代码

    asp.net知识库

    体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0) Server ...

    Asp.Net及相关技术介绍

    此PPT讲述了Asp.Net WebAPI及相关Web服务技术发展历史。 共80多页,Asp.Net WebAPI在讲到第36页的时候才会出现,因为这个技术不是凭空产生的,它有着自己的演变进化的历史。我们要先弄清它从哪里来的?然后再说它能...

    深入解析ASP.NET架构 Demo

    讲座内容: 在本节中,我们将带领大家去深入了解ASP.NET架构,包括一个HTTP请求的生命周期、HttpModule是如何工作的等。 <br/>课程讲师: 邵志东 MSDN特邀讲师 北京新科海学校 副总经理 <br/>技术...

    深入解析ASP.NET架构PDF

    讲座内容: 在本节中,我们将带领大家去深入了解ASP.NET架构,包括一个HTTP请求的生命周期、HttpModule是如何工作的等。 <br/>课程讲师: 邵志东 MSDN特邀讲师 北京新科海学校 副总经理 <br/>技术...

    ASP.NET 编程模型介绍

    ASP.NET框架的编程模型:是指在ASP.NET框架响应客户端请求的整个过程中,按固定顺序执行的一系列处理步骤和事件

    深入理解asp.net里的IHttpHandler

    ASP.NET Framework才调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    ASP.NET2.0内置的urlMappings和基于自定义HTTPModule的URL重写(使用NBear.Web中的UrlRewriteModule实现),并探讨URL重写中可能遇到的陷阱及处理办法。 需要手动为UrlRewriteWebSite目录添加一个到...

    经典asp.net 权限管理

    经典asp.net 权限管理 1)其可以支持多个应用,多个模块的权限管理. 2)支持Access和MsSql200/2005以及Oracle9i以上数据库. 3)采用角色来进行权限的授权,每个用户可以属于多个角色,享有交差权限. 4)整合方便,权限...

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

    本人在博客“Asp.Net底层解析(四)——应用程序生命周期与HttpModule”中的测试代码

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    ● 调试和处理错误的技术 ● 提取、创建、处理和存储XML的各种框架 ● 打包和部署ASP.NET应用程序的方法 ● 快速、逻辑地检索、更新和删除数据 本书读者对象 本书适合于有一些ASP.NET基础知识的学习者以及准备迁移...

    深入解析ASP.NET架构 Video

    讲座内容: 在本节中,我们将带领大家去深入了解ASP.NET架构,包括一个HTTP请求的生命周期、HttpModule是如何工作的等。 <br/>课程讲师: 邵志东 MSDN特邀讲师 北京新科海学校 副总经理 <br/>技术...

    HttpModule 请求处理生命周期图

    HttpModule请求处理生命周期图,很清晰明了,值得看看

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端...

    深入解析ASP.NET架构官方课程视频

    在本节中,将带领大家去深入了解ASP.NET架构,包括一个HTTP请求的生命周期、HttpModule是如何工作的等。

    ASP.NET权限管理系统(FrameWork) v1.0.5

    4)整合方便,权限检测采用httpmodule方式检测.基本不用对原有程序进行修改,便可将原有程序进行整合. 5)可视化编辑,全新的Menu和Tab控件.支持拖拉式编辑. 6)统一的事件日志管理,所有登陆操作都有安全记录. 7)每个模块...

    精通ASP.NET2.0的Web2.0+电子教程.rar

    本书首先介绍 了开发的预备知识,如ASENE了Web窗体页,ASENET基本对象和配置,SQL Server数据库和ADO.NET,数据服务控件,网络文件和图像处理技术等:然 后介绍使用ASP.NET 2.0技术开发的网络应用...

    ASP.NET2.0高级编程(第4版)1/6

    本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...

Global site tag (gtag.js) - Google Analytics