asp.net的处理机制(.ashx/.aspx)

浅谈自己对asp.net 处理机制的图解

图解的内容有点多(包含asp.net 的处理机制和页面生命周期的重要事件,建议小伙伴把图片下载查看可好?)

asp.net处理机制解说

当浏览器发送一条请求给服务器的时候   在服务器的那一端会判断请求的url的后缀   在ii的处理程序映射池中找到相对应的程序集

如果请求的url的后缀是.html 就直接得到这个页面返回给浏览器输出

如果后缀是.ashx/.aspx  那么久调用aspnet_isapi.dll  程序集

首先将调用的是HttpRuntime的  ProcessRequest()

1.0  在这个  ProcessRequest方法中创建了 HttpWorkRequest对象  将请求的url封装在里面

2.0  在这个  ProcessRequest方法中创建了Httpcontext 上下文对象 并且初始化了(request  response  session  server  application handler )  等一些属性  将请求的url 进行拆解 赋值给这些属性

3.0  通过了HttpApplicatioanfactory创建了一个对象  然后取出一个application 对象执行一下的19个管道事件

以下是管道事件中注意的几个地方

在第6个和第7个事件之间   判断当前请求的url在服务器中是否存在未过期的缓存页面

如果 有  那么获取缓存  跳过后面的事件  将结果返回给服务器 服务器在返回给浏览器  然后输出

如果没有  那么在第八个事件里面就会创建请求的页面类的对象

第8个事件

如果后缀是:.ashx   那么创建的就是请求页面类的对象

如果后缀是.aspx    那么创建的就是请求前台页面类的对象

将创建的请求页面类的对象存入当前的handler属性之中

在第9个事件和第11个事件之间 会有一个事件   判断是否实现了IRequireSessionState这个接口

如果有实现的话   获取当前请求报文头俩面的的sessionid   然后去服务器的ssesion池中找到相对应的 session对象 赋值个当前上下文实例的session 属性

如果没有实现 那么session属性不被赋值

在第11个事件和第12个事件间

调用了第八个事件中创建页面类对象的processRequest 方法 (这里要区分aspx页面和ashx页面)

如果是ashx页面  那么直接调用请求页面类的processRequest 方法

如果是aspx页面(.aspx页面继承自page类 page类实现了接口IHttpHandler接口 实现了其processRequest()) 那么先执行的是后台页面类的page_Load() 方法 执行完了后台页面类的代码之后   再执行前台页面类的Rebder_Control()  方法

在第15,16个事件中  将会对过期的页面的进行重新缓存

在第十一个和第12个事件之间 还执行了页面的生命周期

执行完19个管道事件之后   将内容从服务器发送个客户端  以上就是asp.net的处理机制

报文信息

请求头(消息头)包含(客户机请求的服务器主机名,客户机的环境信息等): 
Accept:用于告诉服务器,客户机支持的数据类型  (例如:Accept:text/html,image/*) 
Accept-Charset:用于告诉服务器,客户机采用的编码格式 
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式 
Accept-Language:客户机语言环境 
Host:客户机通过这个服务器,想访问的主机名 
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间 
Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链) 
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等) 
Cookie:客户机通过这个头,将Coockie信息带给服务器 
Connection:告诉服务器,请求完成后,是否保持连接 
Date:告诉服务器,当前请求的时间

一个http响应代表服务器端向客户端回送的数据,它包括: 
一个状态行,若干个响应消息头,以及实体内容 
状态行:  例如:  HTTP/1.1  200 OK   (协议的版本号是1.1  响应状态码为200  响应结果为 OK)

响应头(消息头)包含: 
Location:这个头配合302状态吗,用于告诉客户端找谁 
Server:服务器通过这个头,告诉浏览器服务器的类型 
Content-Encoding:告诉浏览器,服务器的数据压缩格式 
Content-Length:告诉浏览器,回送数据的长度 
Content-Type:告诉浏览器,回送数据的类型 
Last-Modified:告诉浏览器当前资源缓存时间 
Refresh:告诉浏览器,隔多长时间刷新 
Content-Disposition:告诉浏览器以下载的方式打开数据。例如: context.Response.AddHeader("Content-Disposition","attachment:filename=icon.jpg");                                        context.Response.WriteFile("icon.jpg"); 
Transfer-Encoding:告诉浏览器,传送数据的编码格式 
ETag:缓存相关的头(可以做到实时更新) 
Expries:告诉浏览器回送的资源缓存多长时间。如果是-1或者0,表示不缓存 
Cache-Control:控制浏览器不要缓存数据   no-cache 
Pragma:控制浏览器不要缓存数据          no-cache 
Connection:响应完成后,是否断开连接。  close/Keep-Alive 
Date:告诉浏览器,服务器响应时间

页面生命周期的重要事件

LoadState    将表单隐藏域_VIEWSTATE 里面的数据设置给页面对象的viewsate属性

ProcessPostData  将表单里面提交的数据设置给页面的控件相对应的属性

ProcessPostData  Second  如果第一次控件中的数据是null   那么在这一次将数据设置给控件的一些属性

RaiseChangeEvents   执行非点击回传事件

RaisePostEvent         执行点击回传事件

SaveSate                 将控件的属性存入VIEWSTATE中

Render                    遍历控件树种每个控件的Render 来生成html代码  将其存入response中

如何在Reflector查看生命周期源码

在Reflector中搜索Page类   然后从看看里面的ProcessRequest方法

ProcessRequest方法的方法体 是

调用的上图中的pr 方法中的方法体是

在这个方法体重调用了ProcessrequestMain 方法   在ProcessrequestMain 中有页面的生命周期

时间: 2024-09-29 00:47:22

asp.net的处理机制(.ashx/.aspx)的相关文章

【转载】ASP.NET页面运行机制以及请求处理流程

本文转至 ASP.NET页面运行机制以及请求处理流程 IIS处理页面的运行机制 IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页面,是因为IIS有一个ISAPI过滤器,它是一个COM组件.ASP.NET服务在注册到IIS的时候,就会添加一个Win32的扩展动态库aspnet_isapi.dll.并将扩展可以处理的页面扩展名(如ASPX)注册到IIS里面.扩展启动后,就根据定义好的方式来处理IIS所不能处理的页面. 当客户端请

asp.net MVC 路由机制 Route

1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区别 -->Url重写关注的是将一个Url映射到另一个Url. 路由机制关注的是将Url映射到资源上.资源不一定是一个物理页面,可以是类中的方法. -->Url重写只能用于传入的请求Url 路由机制可以匹配传入的Url,也能够生成一个Url -->Url重写大多是IIS级别的,是IIS的一个组

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为  yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context)    {   //将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";        context.Response

ASP.NET 身份验证机制

ASP.NET提供了3种认证方式:windows身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.Forms验证          :用Cookie来保存用户凭证,并将未经身份验证的用户重定向到自定义的登录页.Passport验证      :通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务. 关于这三种验证方式的配置,推荐一篇博文:http://www.cnblogs.com/chenqingwei/arc

ASP.NET的学习之asp.net整体运行机制

1.浏览器向服务器发送请求报文,服务器端的软件比如是IIS,接受请求 2.IIS通过aspnet_isapi.dll 这个程序集来请求FrameWork中的ASP.Net框架,这是对于集成模式 3.进入框架中,首先调用IsapiRunTime 的ProcessRequest(); 4.然后再调用HTTPRuntime的 ProcessRequest(),在方法中创建Http上下文对象 HttpContext, 这个上下文对象很重要,因为在下面调用管道事件时,他是负责通信的. 5.然后再通过Htt

ASP.NET MVC 路由机制

传统的ASP.NET web form 是假想,用户请求的URL和服务器上面的文件之间有某种关联,这里,服务器的工作就是根据接收到的用户请求,检索到对应的文件给用户.这种方式在web form时代很适合,因为ASP.NET页面是aspx页面,并且能够独立的回复用户的浏览器请求. 但是这中方式在MVC中不合适,在MVC中用户请求是通过控制器里面的方法来处理的,在MVC中没有ASP.NET,一对一的文件关联关系;为了解决这个问题,我们要学会MVC路由机制. 路由机制有两个功能: 1.检查收到的URL

ASP.Net内部处理机制

一.IIS服务器根据请求的文件的后缀名来确定如何处理这个请求.例如.html,或.js,或.aspx…服务器获取所请求的页面的后缀名后,在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,并且这个文件也没有受到服务器端的保护(一个受保护的例子就是App_Code中的文件,一个不受保护的例子就是你的js脚本),那么IIS就直接把这个文件返回给客户端. 如果服务器找到了处理此类文件的应用程序,通常称为ISAPI(Internet Server Applicatio

二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)

url重写就是把一些类似article.aspx?id=28的路径重写成 article/28/这样的路径 当用户访问article/28/的时候我们通过asp.net把这个请求重定向到article.aspx?id=28路径有两种方法可以做这件事情 一:基于HttpModule的方案这个方案有有缺点,具体缺点以后再谈我曾写过一篇文章<不用组件的url重写(适用于较大型项目) >就是按这个模式写的 二:基于HttpHandler的方案我们这个例子就是按这个方案做的我们接下来就按这种方式做这个例

ASP.NET MVC- 数据验证机制

ASP.NET MVC的数据验证机制,比起ASP.NET WEBFORM那种高效很多.下面记录以下两个示例,以便日后方便查阅. 方式一:在Controller里通过AddModelError方法返回错误的验证信息,看一下代码示例: Controller里的,注意看一下,他Add的时候提交是HTTPPOST,并且传参是传一个MODEL进来. public ActionResult Add() { return View(); } [HttpPost] public ActionResult Add