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学习系列(14):初识数据可视化
// 首先将caffe的根目录作为当前目录,然后加载caffe程序自带的小猫图片,并显示. 图片大小为360x480,三通道 In [1]: import numpy as np import m ...
- ListView缓存机制踩过的坑
ListView,GrildView使用时候经常会用到缓存机制,随意一搜,例子成千上万,但是讲解都是很一致,跟自己踩的坑很少有人讲解到. 测试 需求: GrildView 分三列显示,默认背景为白色, ...
- [CareerCup] 4.2 Route between Two Nodes in Directed Graph 有向图中两点的路径
4.2 Given a directed graph, design an algorithm to find out whether there is a route between two nod ...
- php模式设计之 适配器模式
在这个有没有对象都要高呼“面向对象”的年代,掌握面向对象会给我们带来意想不到的方便.学编程的小伙伴从开始能写几行代码实现简单功能到后来懂得将一些重复的操作组合起来形成一个“函数”,再到后来将“函数”和 ...
- [软件测试]网站压测工具Webbench源码分析
一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...
- Bootstrap2和3的区别
如果你需要兼容IE8甚至是IE7和IE6,那么只能选择Bootstrap2,虽然它自身在IE6的效果也并不完美. 但是倘若你跟随时代的脚步,并且面向的客户也很高端大气上档次地选择只需要兼容高级 ...
- css边框阴影
<style type="text/css">.mydiv{width:250px;height:auto;border:#909090 1px solid;backg ...
- [BZOJ2659][WC2012]算不出的算式(几何)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2659 分析:很巧的想法,原式的值就是y=q/p x这条直线的下面和左边的点的个数.处理 ...
- shell中的正则表达式
1.正则与通配符 linux中的通配符是用来匹配文件名的,其匹配是完全匹配.只支持通配符则命令有ls find cp等命令 正则是用来匹配字符串的,是包含匹配.只要搜索的内容在某个字符串中,那么改字符 ...
- 思甜雅--关于qq的NABCD模型分析
个人连接:http://www.cnblogs.com/xiaoliulang/ 关于QQ的NABCD模型 N--Need 随着电脑的普及,人们在网络上进行交流的时间越来越多,由于现有的交流工具还不是 ...