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 中有页面的生命周期
asp.net的处理机制(.ashx/.aspx)的更多相关文章
- 【转载】ASP.NET页面运行机制以及请求处理流程
本文转至 ASP.NET页面运行机制以及请求处理流程 IIS处理页面的运行机制 IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页 ...
- 【图解ASP.NET MVC运行机制理解-简易版】
很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然,这个只是处理请求的一部分环节.百度的面试题“客户端从浏览 ...
- asp.net MVC 路由机制
1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...
- asp.net MVC 路由机制 Route
1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...
- ASP.NET MVC运行机制源码剖析
我们都知道ASP.NET首先是从Global.aspx中开始运行的, 在Application_Start()中添加路由映射后, 就由URLRouting组件创建IRouteHandler并执行, 在 ...
- ASP.NET 身份验证机制
ASP.NET提供了3种认证方式:windows身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.Forms验证 :用Cookie来保存 ...
- ASP.NET的学习之asp.net整体运行机制
1.浏览器向服务器发送请求报文,服务器端的软件比如是IIS,接受请求 2.IIS通过aspnet_isapi.dll 这个程序集来请求FrameWork中的ASP.Net框架,这是对于集成模式 3.进 ...
- Asp.Net 之 缓存机制
asp.net缓存有三种:页面缓存,数据源缓存,数据缓存. 一.页面缓存 原理:页面缓存是最常用的缓存方式,原理是用户第一次访问的时候asp.net服务器把动态生成的页面存到内存里,之后一段时间再有用 ...
- 【基础知识】ASP.NET[基础一(ashx)]
一.ASP.NET介绍 1.ASP.NET包括: 一般处理程序(ashx):WebForm ( aspx ):MVC(Model view con~~): 2.ASP.NET的常用文件(重点): 1& ...
随机推荐
- 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和
求和=>[链接] 题目相较起_rqy出的要简单很多,来自noip普及组2015 化简这个式子:x+z=2y,故x与z mod 2同余,因此和桶哥的问题——吃桶一样的思路就可以做出来啦qwq: # ...
- python 分析 知乎粉丝数据
昨天花了一下午写了一个小爬虫,用来分析自己的粉丝数据.这个真好玩!今天帮了群里好多大V也爬了他们的数据.运行速度:每分钟5千粉丝以上.暂时先写成这样,这两天要准备补考,没有时间继续玩这个. 下次要改进 ...
- 使用纯php构建一个简单的PHP服务器
使用原生PHP构建一个简单的PHPWeb服务器 1.目录机构 webserver --src -- Response.php -- Server.php -- Request.php -- vendo ...
- 机器学习-线性回归补充-R^
线性回归算法在选自变量会遇到两个问题:一是去掉多重共线性干扰,二是选择最优自变量组合. 线性回归步骤 1.选择自变量 注意点 去掉多重共线性干扰,选择最优自变量组合.这里需要理解决定系数:R^.它是理 ...
- ubuntu-12.04.5-desktop-amd64 安装vmwaretools
百度文库地址:https://wenku.baidu.com/view/7c1cd211a216147917112820.html 注意:一定要把此文档中的vmwaretools 版本号换成你自己下载 ...
- 《x的奇幻之旅》:有趣的数学科普
本书是相对比较少见的数学方面的科普书.从最简单的阿拉伯数字.加减法,一直到概率统计.微积分.群论.拓扑.微分几何,每个主题都用几千字做一些深入浅出的介绍.写的相当的有趣. 在书中又一次看到这个有趣的事 ...
- Machine Learning:机器学习算法
原文链接:https://riboseyim.github.io/2018/02/10/Machine-Learning-Algorithms/ 摘要 机器学习算法分类:监督学习.半监督学习.无监督学 ...
- python-zmail发送邮件
import zmail #发送测试报告到邮件 with open(r'F:\asus\auto_file\unittest_html\2019-06-30 10-31-03report.html', ...
- boost exception
boost exception provides a new exception type, that lets you add data to an exception after it has b ...
- php min()函数 语法
php min()函数 语法 作用:从所有参数中找到最小数 语法:min(X,Y,Z) 或者min(array(X,Y,Z)) 参数:min函数中参数至少一个,可以多个参数,也可以是数组. 说明:如果 ...