浅谈自己对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 中有页面的生命周期

转载于:https://www.cnblogs.com/soaeon/p/4119592.html

asp.net的处理机制(.ashx/.aspx)相关推荐

  1. DotText源码学习——ASP.NET的工作机制

    --本文是<项目驱动学习--DotText源码学习>系列的第一篇文章,在这之后会持续发表相关的文章. 概论 在阅读DotText源码之前,让我们首先了解一下ASP.NET的工作机制,可以使 ...

  2. 浅谈ASP.NET的内部机制(一)

    浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...

  3. asp.net MVC 路由机制 Route

    1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...

  4. 浅谈ASP.NET的内部机制(二)

    浅谈ASP.NET的内部机制(二)         前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的. ...

  5. IIS和Asp.Net页面运行机制

    在.NET平台下进行Web开发主要运用的是Asp.Net框架,了解其运行机制更能让我们写出高质量的程序,修复不常见的bug. 最近想把这个用博客的形式记录下来.翻阅了一些书籍,浏览了一些大大们,如有雷 ...

  6. ASP.NET身份验证机制membership入门——配置篇(1){转}

    几乎所有的系统中都会使用到访问控制和角色管理这样的功能,例如:新建.修改.删除用户和角色,为用户分配角色,管理角色中的用户等等.于是MS在ASP.NET 2.0开始,实现了这些功能,使得我们在开发中, ...

  7. Asp.net开发中甩掉.ashx .asmx

    一般,asp.net中,提供ajax请求响应的处理,需要借助于一般处理程序(*.ashx)或web服务(*.asmx),并且每一个ajax请求,都要建一个这样的文件,如此一来,如果在一个项目中ajax ...

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

    1.浏览器向服务器发送请求报文,服务器端的软件比如是IIS,接受请求 2.IIS通过aspnet_isapi.dll 这个程序集来请求FrameWork中的ASP.Net框架,这是对于集成模式 3.进 ...

  9. 【基础知识】ASP.NET[基础一(ashx)]

    一.ASP.NET介绍 1.ASP.NET包括: 一般处理程序(ashx):WebForm ( aspx ):MVC(Model view con~~): 2.ASP.NET的常用文件(重点): 1& ...

最新文章

  1. jquery监听pda 按键_nui监听安卓PDA扫描事件
  2. redis学习(二)
  3. mysql dump gtid_mysqldump GTID搭建主从复制库
  4. python 测试用例的无输入_如何为无参数方法自动生成测试用例?
  5. SQLServer子查询相关知识笔记
  6. HDU 2647 Reward 拓扑排序
  7. bootstrap外不引用连接_网络编程Netty IoT百万长连接优化,万字长文精讲
  8. 在凡客四个月的工作总结
  9. 509. 斐波那契数(JavaScript)
  10. 重置PL/SQL Developer工具栏布局
  11. 如何让一个用户拥有root权限
  12. 凸优化第七章统计估计 7.5 实验设计
  13. centos 安装 fortran
  14. c语言阶乘出现负的,C语言求1到20阶乘的和,出来的是负数
  15. 小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写并输出互换后的结果
  16. 刷脸支付的场景应用遍布大街小巷
  17. UE4-使用WebBrowser插件打开720云全景图
  18. 小马哥-----高仿苹果6s plus刷机拆机主板型号Q39主板图与开机界面图 分版本
  19. itest英语考试bug_iTEST爱考试PC版-iTEST爱考试电脑版下载 v1.2.0--PC6电脑版
  20. 三种CRC16 C语言算法理解(CCITT)

热门文章

  1. java北大青鸟试题_10个常见2020春招Java面试题及注意事项!
  2. 【机器学习】机器学习从零到掌握之三 -- 教你使用K近邻算法改进约会网站
  3. 【OpenCV】OpenCV函数精讲之 -- 多通道图像混合
  4. 超强!MDETR:基于Transformer的端到端目标检测神器!开源!
  5. 综述 | 卷积神经网络:从基础技术到研究前景
  6. 2018 年最受欢迎的15个顶级 Python 库
  7. 你的 ResNet 是时候更新了
  8. pytorch入门-简介及安装
  9. matlab 正则化表达式_MATLAB 正则表达式(一)(转)
  10. mysql配置命令_MySQL基本配置命令总结