了解当用户对一个.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启动处理进程后发生了什么事

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

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

    新一篇: Asp.Net运行时对象生成过程以及HttpHandler和HttpModule的处理过程. 了解当用户对一个.aspx页面提出请求时,后台的Web服务器的动作流程.当对这个流程了解后,我们 ...

  2. php.ini配置文件中文详细解释

    php.ini配置文件中文详细解释 ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ;  ; 此配置针对开发目的,并且*不是*针对生产环境 ...

  3. 新手教程:建立网站的全套流程与详细解释

    新手教程:建立网站的全套流程与详细解释 你要是 Baidu 这个话题,得到的结果八成都是广告--他们都会告诉你,"嘿,我(或某公司)这里可以建网站,傻瓜式的哟,快来投奔我吧!" 新 ...

  4. Python精讲Numpy基础,大牛笔记详细解释

    https://www.toutiao.com/a6664936105076326920/ 总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Pyth ...

  5. UIApplication sharedApplication详细解释-IOS

    UIApplication sharedApplication详细解释-IOS 分类: iOS开发2012-07-27 10:25 10287人阅读 评论(2) 收藏 举报 applicationui ...

  6. matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释

    总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python.所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门等, ...

  7. console类详细解释

    console类详细解释 微软链接https://docs.microsoft.com/zh-cn/dotnet/api/system.console?view=netframework-4.8 C# ...

  8. 详细解释下头条图文和微头条发布建议

    详细解释下头条图文和微头条发布建议,我说不建议发图文板块是因为图文相当于之前的博客产品形态,微头条相当于微博产品形态,显然微博打败了博客,同理图文也会被微头条打败,这个大趋势不变且不可逆. 我之所以这 ...

  9. pythonnumpy详解_Python精讲Numpy基础,大牛笔记详细解释

    以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python.所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门 ...

最新文章

  1. GEF常见问题8:导出到图片
  2. redis 系列二 -- 常用命令
  3. 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
  4. 尚学堂requireJs课程---1、作用域回顾
  5. CS231n:卷积神经网络
  6. Xen和虚拟化技术学习指南
  7. 【Linux】一步一步学Linux——mii-tool命令(154)
  8. ES5-10 原型、原型链、闭包立即执行函数、插件开发
  9. 二维数组各行分别求和_【PyTorch入门】之十分钟看懂二维卷积层的运算、实现及应用...
  10. Django - - - -视图层之视图函数(views)
  11. 高T技术大牛的百度十年:白天求生存,晚上求发展
  12. 64位win10下安装xgboost python包的教程
  13. 转载-如果你不熟悉Material Design,请一口吃下这篇干货!
  14. 基于HTML5(微信公众号,小程序)的视频安防解决方案浅析
  15. 在 CentOS 中部署 KMS 服务器(vlmcsd)
  16. 面对疫情,大学生如何保持良好的心理状态
  17. png怎么转ico图标?一招教你如何图片转格式
  18. iOS -- 播放本地音频文件 (Swift)
  19. 供应链库存管理-库存控制策略
  20. 14. echarts画双y轴

热门文章

  1. linux 命令删除命令,Linux 命令之删除命令
  2. python检查_python设置检查点简单实现
  3. 安卓网页广告拦截_拦截烦人的网页广告,增加上网体验
  4. 霍夫变换(Hough Transform):霍夫变化在图像处理以及点云处理中的直线检测应用
  5. opencv感兴趣区域ROI的图像混合操作
  6. BZOJ2038 小Z的袜子(hose)
  7. python close函数_Matplotlib的close()函数使Tkinter GUI窗口关闭
  8. 关于使用python logging模块的几点总结
  9. LRU算法 -- 链表 完整实现
  10. leetcode-86 分隔链表