惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Help Net Security
Help Net Security
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
LINUX DO - 热门话题
Security Latest
Security Latest
A
Arctic Wolf
G
GRAHAM CLULEY
月光博客
月光博客
S
Securelist
D
Docker
J
Java Code Geeks
T
Troy Hunt's Blog
T
Tenable Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
SecWiki News
SecWiki News
S
Security @ Cisco Blogs
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 最新话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
H
Heimdal Security Blog
The Hacker News
The Hacker News
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Forbes - Security
Forbes - Security
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Check Point Blog
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
L
Lohrmann on Cybersecurity
F
Full Disclosure
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed

博客园 - Snow*Cao

request 生命周期及参数信息 vs2010 调试快捷键 温故而知新:封装、继承、多态 海量的jQuery插件帖,很经典 委托事件的理解(转载) 常用JQuery插件整理 关于数据挖掘的详细介绍的一些网址 DropDownList 默认展示从数据库查询的值 Python 开发环境搭建 WCF优秀资源整理--持续更新 Python入门视频教程 txt文本导入到sql server数据库 抽象基类与接口,共性与个性的选择!(区别) C#中值类型和引用类型 通过IIS自带工具Iisapp.vbs查询哪个站点占用资源 主键与外键 分布式缓存BeIT Memcached简介 HttpHandlers和HttpModules接口详解 jquery跨域获取数据以及分页 - Snow*Cao - 博客园
ASP.NET页面运行机制
Snow*Cao · 2011-01-19 · via 博客园 - Snow*Cao

1.ASP.NET运行原理概述

先了解:HttpHandlers 和 HttpModules

 这篇文章详细介绍了这两个对象   http://ljzforever.javaeye.com/blog/374670

HttpHandlers :MSDN上是这样解释的

   根据请求中指定的 URL 和 HTTP 谓词将传入的请求映射到相应的处理程序。可以在配置层次中的任何级别声明此元素。

   HttpModule则主要被用于在最开始的阶段处理一个请求以及在最后阶段处理一个响应。

  如上图,当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做HttpHandler,为什么aspx这样的文件可以被服务器处理,那是因为在服务器端有默认的HttpHandler专门处理aspx文件,IIS再将这条请求发送给能够处理这条请求的模块之前,还需要经过一些HttpModule,这些都是系统默认的Modules,而且在这个http请求传到HttpHandler之前要经过不同的HttpModuls的处理,这就像我们如果要乘坐国际航班飞抵异国他乡的话,在你真正坐上飞机前,要经过购买机场建设费,办理登记手续核实身份,进行行李打包托运,进行安全检察,现在又要进行体温等检察一样,需要经一系列的严格的手续。这样做有什么好处,一是为一些必须的过程,二是为了安全性,三是为了提高效率,四是为了我们能够在更多的环节上进行控制,即增强了我们的控制能力。而上述的都是系统的,怎么能说是我们的对http请求控制能力能,那么我们是否可以建立自己的HttpModuleHttpHandler吗?答案是肯定的。但我们先不要急于做事,让我们再深入研究一下运行机制吧。

2.ASP.NET运行机制

  那么上面这张图让我们能够更清楚地看到一个http请求是如何经过服务器的处理的,同时通过这张图我们也可以看出Request是掌管着所有客户端输入的。图中为我们展示了一个http请求有可能经过的四条路线。当你第一次访问这个页面时这个请求首先依次经过HttpModulsHttpHandler的处理,而在HttpHandler的处理中服务器会为你转到你真正要访问的页面,然后通过ASP Engine来找到这个页面背后的类,并实例化为一个临时对象,再此过程中会触发一系列的事件,其中一部份的事件需要经过对象中的方法处理,之后服务器会将这个处理后页面发移交给Response对象,然后由Response对象将这个页面发送到客户端。这就是第一条路线,而当你在这个页面上进行重新提交一些信息,并继续向服务器发送请求时,因为你的服务器之间的会话已经建立,对于你所在的那个临时对象在服务器中已经建立,所以不用再经过初始化页面的工作,故这第二条路线是按照 HttpModulsHttpHandler,然后直接与临时对象交互,然后返回的。第三条路线与第二条不同的是在处理请求时如果涉及到需要调用ASP Cache,ASP 缓存的,而临时对象回将直接从ASP 缓存提取信息并返回.这第四条路线就是当你刷新这个页面的时候,服务器接收到时发现这个请求先前已经处理过了,并将处理结果存储到由一个默认的HttpModule管理的输出缓存中了,那么我们就可以直接从这个缓存提取信息并返回,而无需再重新处理一遍了。