HttpApplication的处理管道处理过程简单描述
在asp.net中,asp.net服务器对每次请求的处理过程都是相同的,都要经过HttpApplication的处理管道。管道内的处理过程是固定的,在服务器处理请求的各个阶段,伴随着处理的进行,依次触发对应的事件,便于程序员,在不同的阶段完成自定义的处理工作。
一次请求到来,首先触发的事件是BeginRequest,这是服务器处理工作开始的第一个事件。
开始处理请求后,第一个重要的工作就是确定用户的身份,以实现安全机制。这个工作通过AuthenticateRequest和PostAuthenticateRequest两个事件提供检查当前用户的身份。AuthenticateRequest事件表示开始检查用户的身份,而PostAuthenticateRequest表示用户身份检查完成。检查后的用户可以通过HttpContext的User属性获得。这个属性的类型为System.Security.Principal.IPrincipal,IPrincipal又有一个类型为System.Security.Principal.IIdentity的属性,IIdentity有一个bool类型的属性IsAuthenticated,表示当前用户是否已经被验证。如果该属性为false,则表明当前请求的用户为一个匿名用户,否则,通过IIdentity类型为string的Name属性,可以获得当前用户的用户名。
当asp.net获取用户身份后,根据用户身份,开始校验请求的权限工作,当第4个事件AuthorizeRequest触发的时候,表示开始进行用户的权限检查,而第5个事件PostAuthorizeRequest则标志已经完成用户权限的检查工作。如果用户没有通过安全检查,一般情况下,将跳过剩下的事件,直接触发最后一个事件EndRequest结束请求的处理过程。
当用户获得了请求权限,那么服务器开始准备用最快的方法来使用户得到相应的结果,ResolveRequestCache事件标志着到从前的缓存的结果中进行检查,看是否可以直接从以前的缓存的结果中直接取得处理的结果,PostResolveRequestCache表示完成缓存检查。
如果缓存中没有结果的时候,则必须通过一次处理来计算出当前请求的结果。在asp.net中,用于处理请求以得到结果的对象成为处理程序Handler,在asp.net中,提供了很多的处理程序,程序员也可以自定义处理程序。为了处理这个请求,asp.net必需按照匹配规则找到一个处理当前请求的处理程序,PostMapRequestHandler事件表示已经取得了这个处理程序,HttpContext的Handler属性就表示这个处理程序对象。从上面分析可知,HttpContext的Handler属性到这里才有实际的意义。
得到了处理程序之后,还不能马上进行处理,这是由于处理请求还需要许多与这个请求有关的数据。比如说,这个用户在上一次向服务器发送请求的时候,在服务器上已经保存了一些这个用户的特有数据。从asp时代开始,Session这个概念在web中就已经出现,提供了基于会话的状态管理,由于http协议的无状态性,状态管理成了web开发中的一个核心的问题。
为了获取这个用户之前保存的专有数据,AcquireRequestState事件提供了一个切入点,PostAcquireRequestState事件则表示已经完成了用户数据的获取工作,可以在处理中使用了。
一切准备就绪,PreRequestHandlerExecute事件用来通知我们,处理程序就要开始进行处理工作了,如果在用户的状态已经获取之后,还有需要在程序处理之前进行的工作,那么就在这个事件中进行处理。
在PreRequestHandlerExecute事件之后,asp.net服务器将通过执行处理程序完成请求的处理工作,这个处理程序可能是一个web窗体,也可能是一个web服务,这个工作将在第11个和12事件之间完成。
处理程序完成之后,服务器进行扫尾工作,PostRequestHandlerExecute事件通知我们,asp.net服务器的处理工作已经完成。
在处理完成之后,由于在处理程序中,用户可能修改了用户特定的专有数据,那么,修改之后的用户状态数据可能需要进行序列化或者保存处理。ReleaseRequestState事件通知我们释放这些状态数据,PostReleaseRequestState事件则表示状态释放完成。
在处理完成之后,如果希望将这次处理结果缓存起来,以便于在后继的请求中可以直接使用这个结果,UpdateRequestCache事件提供了处理机会,PostUpdateRequestCache表示更新缓存完成。
在asp.net 4.0中,新增了2个事件用来处理日志工作,LogRequest表示这次请求记入日志中,PostLogRequest表示完成了日志的记录。
一次请求,并不一定经过所有的时间,比如说,用户没有经过授权检查,那么将跳过后面的事件,但EndRequest事件是所有请求都要经过的最后一个事件。这个事件之后,服务器将处理结果返回浏览器,完成服务器的处理工作。
HttpApplication的处理管道处理过程简单描述的更多相关文章
- HttpApplication处理管道处理过程简单描述
HttpApplication对象是由Asp.net帮助我们创建的,它是asp.net中处理请求的重要对象.为了便于扩展,HttpApplication采用处理管道的方式进行处理,将处理的步骤分为多个 ...
- android开机过程简单描述
1 开机引导bootloader,相当于电脑开机启动bios 2 引导过后可以进入三种模式:fastboot, recovery, linux kernel.前两种跟版本升级相关,正常开机进入linu ...
- HttpApplication的处理管道19个事件。
HttpApplication对象是由Asp.net帮助我们创建的,它是asp.net中处理请求的重要对象.为了便于扩展,HttpApplication采用处理管道的方式进行处理,将处理的步骤分为多个 ...
- 简单描述RAID级别:
简单描述RAID级别: RAID 0 是俩盘一起读写,如果一个坏了那么数据全丢失: RAID 1是一块写,一块用来备份,坏一块无所谓: RAID 2 ,3 ,4 不常用: 最常用的就是RAID 5和R ...
- Java中会存在内存泄露吗?请简单描述。
本文转载自:Java中会存在内存泄漏吗,请简单描述 会.java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周 ...
- Asp.net MVC进入请求管道的过程
Asp.net MVC进入请求管道的过程 Asp.Net MVC 跟AspNet 入口解释 Asp.Net MVC请求处理过程 mvc 请求模型 mvc的原理 mvc模型 NewMVCPipleLin ...
- ECSHOP购物车页面显示商品简单描述
1.这里说的商品简单描述,不是商品的详细信息,而是后台编辑商品时在“其他信息”标签栏填写的那个“商品简单描述”,即goods_brief字段 2.修改lib_order.php文件的get_cart_ ...
- TCP/IP 协议标准简单描述
TCP/IP 协议标准简单描述 说明 分为三部分:中文名称.缩写.说明. 应用层 DNS 域名服务 (DNS) 功能: 将域名转化为IP地址 BOOTP 引导程序协议 (BOOTP) 功能: 允许无盘 ...
- RTSP交互命令简介及过程参数描述
目录 [hide] 1 RTSP消息格式 2 简单的rtsp交互过程 3 rtsp中常用方法 3.1 OPTION 3.2 DESCRIBE 3.3 SETUP 3.4 PLAY 3.5 PAUSE ...
随机推荐
- caffe windows 学习第一步:编译和安装(vs2012+win 64)
没有GPU,没有linux, 只好装caffe的windows版本了. 我的系统是win10(64位),vs 2012版本,其它什么都没有装,因此会需要一切的依赖库. 其实操作系统只要是64位就行了, ...
- 信息安全系统设计基础第四次实验报告20135324&&20135330
课程:信息安全系统设计基础 班级:1353 姓名:杨舒雯 张若嘉 学号:20135324,20135330 实验日期:2015.11.17 15:30-17:30 实验名称:外设驱动程序设计 实验目的 ...
- Openwrt 无法上40MHZ带宽
最近有一个纠结的事情是双天线路由没法上40MHZ带宽,怎么改都不成功,其中 在无线高级设置里面打开了40MHZ带宽: 后来在客户端连上之后,在无线的页面一直显示都是20M的带宽.于是我想是不是驱动或者 ...
- 转 Windows server 2008 搭建VPN服务
VPN英文全称是“Virtual Private Network”,就是“虚拟专用网络”. 虚拟专用网络就是一种虚拟出来的企业内部专用线路.这条隧道可以对数据进行几倍加密达到安全使用互联网的目的. ...
- 整合 Bing translator 到自己的系统中
整合这个功能, 是因为 aliexpress 的买家来自不同国家, 我的 "小卖家" 同步到买家的留言, 很多西班牙,俄罗斯等小语种的文字, 看不懂. Google 被墙, 基本很 ...
- Node基础:资源压缩之zlib
概览 做过web性能优化的同学,对性能优化大杀器gzip应该不陌生.浏览器向服务器发起资源请求,比如下载一个js文件,服务器先对资源进行压缩,再返回给浏览器,以此节省流量,加快访问速度. 浏览器通过H ...
- (旧)子数涵数·PS ——翻页效果
一.首先在网络上下载一张图片,作为素材.这是我下载的素材,至于为什么选择这张照片呢,当然不是因为自己的一些羞羞的念头啦. 二.打开Photoshop,我使用的版本是CS3(因为CS3所占的磁盘空间较小 ...
- [C#]AES加密算法实现
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- Javascript基础系列之(四)数据类型 (数组 array)
字符串,数值,布尔值都属于离散值(scalar),如果某个变量是离散的,那么任何时候它只有一个值. 如果想使用变量存储一组值,就需要使用数组(array). 数组是由多个名称相同的树值构成的集合,集合 ...
- iOS 使用AFNetworking遇到异常 Request failed: unacceptable content-type: text/html
错误日志是: Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unac ...