开发者社区> 技术小甜> 正文

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 ,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
〖Docker指南⑤〗学习Dockerfile,看这一篇就够了
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
7 0
万字长文丨7个经典问题,助你拿下Java面试(建议收藏)
万字长文丨7个经典问题,助你拿下Java面试(建议收藏)
8 0
阿里云镜像站下载gimp镜像
阿里云镜像站下载gimp镜像
87 0
❤️Android 从源码解读 Apk 的安装过程 ❤️(中)
PackageManagerService installStage() mHandler() HandlerParams.startCopy() InstallParams FileInstallArgs.copyApk() PackageManagerServiceUtils.copyPackage()
11 0
我绘制文章插图的三个神级工具
今天来给大家介绍三个我在制作文章插图时经常使用的堪称神级的工具,每一个工具都可以绘制非常精美图片,对于经常输出文章的朋友来说,绝对不容错过~
6 0
在Centos 7上配置Pouch 镜像方法
在Centos 7上配置Pouch 镜像方法
83 0
〖Docker指南⑥〗快速入门Docker的五种网络模式
Docker 使用Linux bridge 技术,当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
7 0
深度学习模型实战-深度学习模型在各大公司实际生产环境的应用讲解文章
建这个仓库的是因为工作之后发现生产环境中应用的模型需要做到速度和效果的平衡,并不是越复杂越好。所以一味的追求新的模型效果不大(并不是不追,也要多看新东西)。学到模型最终是要用,而且要用好,于是就建了这么个仓库,积累一下深度学习模型在各个公司中的应用以及细节,这样在自己工作中可以做到借鉴。主要是罗列一些各大公司分享的文章,涉及到搜索/推荐/自然语言处理(NLP),持续更新... 仓库地址:https://github.com/DA-southampton/Tech_Aarticle/edit/master/README.md
5 0
〖Docker指南⑦〗docker-compose快速入门
由Docker引领先锋,容器在过去的一年里得到了飞速发展。容器技术提供了组件化环境,帮助应用在云之间轻松迁移而无需显著的返工。当谈到构建云以及非云的应用时,容器的战斗口号是可移植性和简单性。
8 0
+关注
10145
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载