HTTP管道模型处理WEB程序很小的一方面。管道模型是类似于Web Services的一种在服务器端处理ASP.NET页面的框架技术


一、管道对象模型
在System.Web的命名空间中处理HTTP的请求主要使用管道模型。一般的管道模型的结构如图-1。在管道模型开始运行前,HTTP的请求首先被传到HttpRuntime类的一个实例中,然后这个HttpRuntime的对象开始检查请求并找出这个请求被发送到的那个应用程序(在管道程序看来,一个虚拟目录就是一个应用程序)。然后管道模型就使用一个HttpApplicationFactory对象来找出或者创建一个HttpApplication对象来处理这个请求,一个HttpApplication可以包含一系列HTTP module对象(派生自IHttpModule接口)。HTTP modules作为一个过滤器可以在HTTP请求和响应信息穿过管道模型时检查和修改这些信息的内容。然后HttpApplication对象就使用HTTP handler factory来找出或产生一个HTTP handler对象。HTTP handlers是HTTP通信的最后一步,它主要用于处理请求信息(request)和响应信息(response)。注:HTTP handlers和 handler factory分别派生自IHttpHandler接口和IHttpHandlerFactory接口。

一个HttpApplication包括它的modules、handler在同一时刻只能处理一个Request请求。如果多重request请求同时到达一个相同的application时,多重HttpApplication对象将会被使用。
管道模型使用一个HttpContext对象去描述声明每一个成对的request/response信息。这个对象在HttpApplicaiton和handler之间来回传递。 每一个module也能访问当前的HttpContext。HttpContext对象通过属性来描述声明HTTP的request和response信息(分别创建HttpRequest类和HttpResponse类的对象);同样,HttpContext对象也能通过属性来描述声明安全信息和每一个call、session和application。-2展示了部分HttpContext类常用的属性。
ASP.NET的HTTP管道模型是可扩展的,你可以实现自己的HTTP module、handler以及handler factory。你也可以直接继承HttpApplication类。

属性名 描述
Application 每一个application的request信息
Application Instance 正在处理request请求的Application对象
Cache 每一个application的缓存信息
Handler 正在处理request请求的Handler对象
Items 每一个request请求信息
Request HTTP request 信息
Response HTTP response 信息
Server Utility functions
Session Per-user cross-request state
User User information

HTTP请求---> HTTP.SYS程序处理HTTP请求,判断请求是否在服务器的缓存区----> 如果缓存没有,则进入IIS ---->  IIS首先判断是何种类型的文件,根据文件调用相应的程序---->如果是ASP.NET程序,则调用工作进程w3wp.exe(IIS7以上)装载asp_isapi.dll程序集----->asp_isapi.dll加载CLR环境,创建APPDomain,创建HOSTEnviment对象----->创建ISAPIRunTime对象----->ISAPIRuntime将HTTPWorkRequest对象传递给---->HTTPRuntime---->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler->HttpHandler.ProcessRequest()

HttpModule

负责监听HttpRequest,同时对HttpRequest增添或者过滤掉一部分内容。也就是说,当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。

HttpHandler

当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。

以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandler Factory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。

一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的


最新文章

  1. Linux Hadoop2.7.3 安装(单机模式) 二
  2. Linux初学:(二)Shell环境与命令基础
  3. Neural Style学习2——环境安装
  4. 使用airbnb的eslint
  5. IIS负载均衡ARR路由请求到ARR服务器和处理服务器
  6. Linux 下增大tomcat内存
  7. Centos下LAMP环境搭建
  8. UVa 1636 (概率) Headshot
  9. centos系统常用软件环境搭建
  10. OpenLayers访问WTMS服务及添加Googlemap
  11. 模仿jquery的一些实现 第二版
  12. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
  13. L1正则化比L2正则化更易获得稀疏解的原因
  14. centos7 mysql自动备份
  15. Linux 源码安装 Python3
  16. Strange Towers of Hanoi POJ - 1958(递推)
  17. Android开发入门经典【申明:来源于网络】
  18. 剑指Offer 45. 扑克牌顺子 (其他)
  19. js 加减乘除失精
  20. glfw3native.h and glfw3.h

热门文章

  1. oracle导入expdp、导出impdp数据库用户
  2. codevs——T3657 括号序列
  3. Spring Boot 第一个demo
  4. [SharePoint][SharePoint Designer 入门经典]Chapter11 工作流基础
  5. Libevent学习笔记
  6. Android开发之配置adb工具的环境变量
  7. 怎样在Java中运行Hive命令或HiveQL
  8. void型指针
  9. 0x21 剪枝
  10. CentOS 7 安装 vmware tools 提示The path "" is not a valid path to the 3.10.0-957.el7.x86_64 kernel headers.