HTTP运行时与页面执行模型
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html
HTTP运行时
HTTP运行期处理客户端应用程序(例如Web浏览器)进入的一个Web请求,通过处理它的应用程序的适当组件路由请求,然后产生响应并发回提出请求的客户端应用程序。
进入的HTTP Web请求最先由IIS Web服务器接收到,它在此请求基于ASP.NET已注册处理的扩展名传送到ASP.NET ISAPI上。
HTTP运行期首先创建一个HttpContext对象的实例,它包含了当前正在处理的请求信息,接着创建在处理逻辑中涉及到的所有其他组件都可以使用的上下文对象。HttpContext实例提供了对请求对象(HttpRequest类的实例)和响应对象(HttpResponse类的实例)的访问。
HTTP运行期集成由称为HTTP模块(HTTP Module)的组件构成的处理管线,用于执行请求预处理动作(如:高速缓存的查询和授权)和后处理动作(如:更新调整缓存)。这些组件实现IHttpModule接口。在管线中,每个模块处理不同的全局应用层次和特定请求事件来执行其逻辑。
HTTP运行期基于请求的URL还选择一个HTTP处理程序(实现IHttpHandler接口的组件)或HTTP处理程序工厂(实现IHttpHandlerFactory接口的组件)来完成引入请求的实际处理过程。处理程序用HttpContext对象来收集请求信息、并写出响应的结果。

图1:ASP.NET Web 应用程序中的请求处理过程
一个HTTP请求的处理过程
当一个HTTP请求被送入HttpRuntime之后,这个HTTP请求会继续被送入到一个被称为HttpApplicationFactory的容器中。而这个窗口会给出一个HttpApplication实例来处理传递进来的HTTP请求,而后这个HTTP请求会依次进入如下几个容器中:
HttpModule ——> HttpHandler Factory ——> HttpHandler
当系统内部的HttpHandler的ProcessResquest的方法处理完毕之后,整个Http Request就被处理完成了,客户端也就得到相应的结果了。
一个完整的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()
页面执行模型
页面执行模型由页面HTTP处理程序工厂开始,它注册HTTP运行期以为所有.aspx文件处理请求。页面处理程序工厂负责创建一个Page对象的实例,这是将最终处理请求所生成响应结果的HTTP处理程序。
首先页面处理程序工厂尝试在与请求的.aspx文件相关的.NET高速缓存内查找以前编译过的页面类。当查找失败时,就像第一次请求一样,处理程序工厂将读取和解析文件,并创建一棵解析树(parse tree)。解析树类似于控件树,但是并不包含控件,解析树包含称为控件生成器(control builder)的对象实例。控件生成器包含了在解析过程期间收集的相关控件信息。然后通过Page指令中的Language attribute,用与页面相关的语言把解析树转变为代码。然后,页面处理程序工厂调用适当的编译程序,动态地编译从Page中得到的类,页面处理程序工厂还将新建的类放置到ASP.NET调整缓存中,并且把高速缓存记录和文件相关性关联起来。文件相关性监视.aspx文件做出的变化,并保证任何变化都自动地使高速缓存记录无效,在下次请求时这些记录将再次解析修改过的文件。

图2:页面如何处理请求
HTTP运行时与页面执行模型的更多相关文章
- 【Framework】HTTP运行期与页面执行模型
HTTP运行期 HTTP运行期处理客户端应用程序(例如Web浏览器)进入的一个Web请求,通过处理它的应用程序的适当组件路由请求,然后产生响应并发回提出请求的客户端应用程序. 进入的HTTP Web请 ...
- [.NET大牛之路 005] .NET 的执行模型
.NET大牛之路 • 王亮@精致码农 • 2021.07.06 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经发展到 ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- ASP.NET执行模型之IIS服务器处理流程
之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过 ...
- servlet的生命周期与运行时的线程模型
第 14 章 生命周期 注意 讲一下servlet的生命周期与运行时的线程模型,对了解servlet的运行原理有所帮助,这样才能避免一些有冲突的设计. 如果你不满足以下任一条件,请继续阅读,否则请跳过 ...
- Windows Phone 执行模型概述
Windows Phone 执行模型控制在 Windows Phone 上运行的应用程序的生命周期,该过程从启动应用程序开始,直至应用程序终止. 该执行模型旨在始终为最终用户提供快速响应的体验.为此, ...
- JavaScript对象模型-执行模型
数据类型基本数据类型基本数据类型是JS语言最底层的实现.简单数值类型: 有Undefined, Null, Boolean, Number和String.注意,描述中的英文单词在这里仅指数据类型的名称 ...
- CLR via C# 摘要一:托管程序的执行模型
托管程序的执行模型大致如下: 编译源代码为程序集(dll或exe文件),程序集包括了记录相关信息的元数据和IL代码 执行程序集文件时,启动CLR,JIT负责把IL编译为本地代码并执行 IL是微软推出的 ...
- CLR执行模型
好好学习底层运行机制,从CLR via C# 开始. CLR的执行模型: CLR:Common Language Runtime,是一个可由多种编程语言使用的"运行时".CLR的核 ...
随机推荐
- [coding horror] 1 - sum 2
sum 2 描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 对应每个测试案例,输出两个数,小的先输出. codi ...
- winServer2008下安装SqlServer2008数据库
1 安装文件包 文件名 cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso SHA1 0EEFF017B21635DF33F33C ...
- CodeForces 706C Hard problem
简单$dp$. $dp[i][0]$:第$i$个串放置完毕,并且第$i$个串不反转,前$i$个串字典序呈非递减的状态下的最小费用. $dp[i][1]$:第$i$个串放置完毕,并且第$i$个串反转,前 ...
- QTREE - Query on a tree
QTREE - Query on a tree 题目链接:http://www.spoj.com/problems/QTREE/ 参考博客:http://blog.sina.com.cn/s/blog ...
- 《css揭秘》
<css揭秘> 第一章:引言 引言 案例们 第二章:背景与边框 背景和边框 半透明边框(rgba/hsla.background-clip) 多重边框(box-shadow) 灵活的背景定 ...
- SQL Server2012中的SequenceNumber
http://www.cnblogs.com/CareySon/archive/2012/03/12/2391581.html https://q.cnblogs.com/q/53552/ https ...
- EBS FORM FOLDER 开发,单元格无法使用右键
问题描述: 在使用folder开发FORM后,单元格无法使用右键,正常应该可以右键进行隐藏.显示.复制等操作. 通过对比发现是因ITEM属性中 弹出式菜单未设置导致. 解决方法: 设置弹出式菜单
- Xcode好用的插件(随时更新)
古人云"工欲善其事必先利其器",打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!下面简单介绍下插件是什么.如何使用Xcode插件以及一些常用的Xcode插件的推荐. 一.插 ...
- Unsupported major.minor version 51.0解决方案
在使用myeclipse创建map/reduce项目,或者运行hadoop程序时: 在安装hadoop-eclipse-plugin插件会报:Unsupported major.minor versi ...
- FireFox的配置文件的引用
1.firefox的配置文件的实际路径:C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\oviavula.default ...