HTTP Pipeline

简介:

————————————————————————————————

————————————————————————————————

————————————————————————————————

———————————————————————————————

http://msdn.microsoft.com/en-us/magazine/cc188942.aspx#S1

处理http请求使用管道模型

如下图:

http请求传到一个HttpRuntime类的实例,也就是管道的开始。HttpRuntime对象检测这个请求,然后识别出他该被发送到哪个应用程序(从管道的角度来看,一个虚拟路径就是一个应用程序。)然后他使用HttpApplicationFactory来找到或者创建一个HttpApplication对象,以此处理请求。一个HttpApplication持有一组HTTP module对象,实现了IHttpModule 接口。HttpApplication 使用HTTP handler factory 来找到或者创建一个HTTP handler对象。HTTP handler是HTTP通信的终点,它处理请求消息,产生相应的响应消息。HTTP handlers和handler factories各自实现了IHttpHandler 接口和IHttpHandlerFactory接口。

一个HttpApplication,它的module和handler在一个时间内只能用来处理一个请求。如果多个请求同时到达,并且指向同一个应用程序,那么将会使用多个HttpApplication。为了效率原因,HttpApplicationFactory和HttpHandlerFactory把HttpApplication和HTTP handler各自池化。

管道使用HttpContext对象来代表每对请求/响应,这个对象传递给HttpApplication,HttpApplication在把它传递给HTTP handler。每个Module也可以访问当前的HttpContext。HttpContext 对象暴露的属性代表了HTTP请求和响应消息,它们是HttpRequest 和HttpResponse 类的实例。HttpContext也暴露了表示安全的属性,和每个Call,每个session,每个application状态。下图表示HttpContext 最常用的属性。

Application:Per-application cross-request state

Application Instance:Application object processing request

Cache:Per-application cached state

Handler:Handler object processing request

Items:Per-request state

Request:HTTP request message

Response:HTTP response message

Server:Utility functions

Session:Per-user cross-request state

User:User information

ASP.NET HTTP管道依靠IIS接收处理请求(它也可以被集成到其他web服务器中)。当IIS收到HTTP请求后,它会检查扩展名,如果文件后缀名关联到的是可执行代码,IIS将会调用代码处理请求。映射文件后缀名和可执行代码的规则记录在IIS元数据库中,当ASP.NET安装后,它会将这个映射关系添加到IIS中,包括.aspx,.asmx映射到aspnet_isapi.dll。

当IIS收到一个HTTP请求,它会调用在aspnet_isapi.dll中的代码,Aspnet_isapi.dll使用一个命名管道将请求从IIS服务转发到ASP.NET工作进程的一个实例上,aspnet_wp.exe。在windows .net服务器上,asp.net集成了IIS6.0内核模式HTTP监听,允许请求从操作系统直接传递到工作进程,不需要通过inetinfo.exe。工作进程使用HttpRuntime类的实例来处理请求

HTTP管道总是在工作进程的一个实例中处理请求,默认的,一个时间内只有一个工作进程在处理。如果你的WEB服务器有多个cpu,你可以配置管道使用多进程。管道工作进程通过APPdomain实现隔离。你可以认为一个Appdomain是一个轻量级的进程中的进程。管道发送所有的HTTP请求,指向同一个虚拟路径到单一的AppDomain。换句话说,每个虚拟路径都被看做独立的应用程序。

ASP.NET支持基于一些规则上,循环利用工作进程,包括时间,时间花销,请求服务数,请求队列数,和物理内存消耗。全局的.NET配置文件,machine.config设置这些值的阀值。当一个aspnet_wp.exe穿过这些阀值,aspnet_isapi.dll会启动一个新的工作进程实例,开始发送请求。老的实例在完成处理请求后终结。循环利用工作进程提升了可靠性。

完整的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这个容器中做到这个的。
可以简单的认为如下的流程。

 
















本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/591471 ,如需转载请自行联系原作者



相关文章
|
3月前
|
网络协议 网络架构
HTTP方法有哪些?
HTTP方法有哪些?
|
3月前
|
存储 网络协议 安全
HTTP简介(GET,POST)
HTTP简介(GET,POST)
25 0
|
3月前
|
网络协议 C++
基于reactor模型的http服务器
基于reactor模型的http服务器
31 0
|
9月前
|
存储 缓存 网络协议
Http1.0和Http1.1的区别?Http1.1和Http2.0的区别
Http1.0和Http1.1的区别?Http1.1和Http2.0的区别
77 1
|
4月前
|
网络协议 算法
HTTP/1.1和HTTP/2.0有什么区别
HTTP/1.1和HTTP/2.0有什么区别
|
4月前
|
缓存 网络协议
HTTP/1.0和HTTP/1.1有什么区别
HTTP/1.0和HTTP/1.1有什么区别
|
8月前
|
JSON API 开发者
简化 HTTP 请求:深入了解 HTTP Template(HTTP 模板)
在现代的应用程序开发中,与远程服务器进行 HTTP 请求是常见的操作,用于获取数据、发送请求等。为了简化这一过程,HTTP Template(HTTP 模板)应运而生,它提供了一种方便的方式来执行 HTTP 请求,降低了开发复杂度。在本文中,我们将详细介绍 HTTP Template 的特性、用法以及在实际应用中的优势。
263 0
|
11月前
|
XML JSON 缓存
为什么有了 HTTP 还要 RPC
为什么有了 HTTP 还要 RPC
|
存储 缓存 网络协议
HTTP client
HTTP client
108 0