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

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - 小K

jquery、js调用iframe父窗口与子窗口元素的方法整理 转载笔记:DropDownList无限级分类(灵活控制显示形式) [转]oracle数据库定时任务dbms_job的用法详解 转 无依赖Office资源的导入导出 IE带有的网页过渡特效,可以用于触摸屏程序 - 小K - 博客园 屏蔽IE的图片工具条,防止图片被轻易保存的一种方法 - 小K - 博客园 Asp.Net Winform 条形码系列之Code39 Code39 Of .Net BarCode Serial Blog 如何用SQL语句给表增加字段? 如何分区视图? 只需四天,从零开始选购笔记本电脑【转】【荐】 IP地址、手机归属和身份证查询接口 Ajax Loading图标收集 - 小K - 博客园 IE下的开发工具包 [转载]5行代码实现无缝滚动 - 小K - 博客园 [发布]LinScroll (jquery插件) (用图片自定义滚动条) 于.net开发平台项目案例集锦 ASP通用分页类[强] SQL SERVER日志清除方法 远程连接SQL Server 2000 SQL Server 2000不能远程连接的问题
asp.net HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。
小K · 2008-04-29 · via 博客园 - 小K

 

新一篇: Asp.Net运行时对象生成过程以及HttpHandler和HttpModule的处理过程。

了解当用户对一个.aspx页面提出请求时,后台的Web服务器的动作流程。当对这个流程了解后,我们就会明白HttpHandler和HttpModule的作用了。

首先,来了解一下IIS系统。它是一个程序,负责对网站的内容进行管理,以及对客户的请求(就是Http请求)做出反应。当用户对一个页面提出请求时,IIS做如下反应(忽略权限):
1.把对方请求的虚拟路径转换成物理路径
2.根据物理路径搜索请求的文件
3.找到文件后,获取文件的内容
4.生成Http头信息。
  PS:关于IIS和IE生成的Http头信息(元数据),可以用这个工具:http://www.blunck.info/iehttpheaders.html,它是IE的一个插件,专门查看头信息的。
5.向客户端发送所有的文件内容:首先是头信息,然后是Html内容,最后是其它文件的内容。
6.客户端IE浏览器获得信息后,解析文件内容,找出其中的引用文件,如.js .css .gif等,向IIS请求这些文件。
7.IIS获取请求后,发送文件内容。
8.当浏览器获取所有内容后,生成内容界面,客户就看到图像/文本/其它内容了。

但是IIS有个缺点,即它仅仅支持静态html页面的内容,就是说,他只能分析如.htm,.html这样的文件内容。像一些动态内容的页面,含有服务器端操作代码的页面类型,如.asp,.aspx,.cgi,.php等,IIS不认识这些专用的标记,它就会把它当作文本,丝毫不做处理发送到客户端。

为了解决这个问题。IIS推出了一种机制,叫做ISAPI的开放扩展,这个东西是一个标准组件(COM组件),他是一个过滤器+跳转程序,如果安装了专门的扩展,那么在访问IIS所不能处理的文件时,如.asp和.aspx文件,IIS就会在自己的进程里面启动这个扩展。刚才说了,ISAPI首先是个过滤器,他在注册到IIS的时候,会把每个扩展可以处理的文件扩展名注册到IIS里面。扩展启动后,就根据定义好的方式来处理IIS所不能处理的文件,然后把控制权跳转到专门处理代码的进程中。让这个进程开始处理代码,生成标准的HTML代码,生成后把这些代码加入到原有的Html中,最后把完整的Html返回给IIS,IIS再把内容发送到客户端。

我拿一个请求asp.net页面的执行步骤说明:
1 客户端IE浏览器通过Http协议向一个Web服务器提出请求,如
  http://www.microsoft.com/china/msdn/default.mspx

2 当请求到达时,IIS 检查资源类型(就是检查请求文件的扩展名,发现不是自己所能处理的),就调用 ASP.NET ISAPI 扩展。如果启用了默认的进程模型,aspnet_isapi 会将请求排队,并将请求分配给辅助进程。所有的请求数据都通过异步 I/O 发送。如果启用了 IIS 6 进程模型,请求将自动在辅助进程 (w3wp.exe) 中排队,此辅助进程用于处理应用程序所属的 IIS 应用程序池。IIS 6 辅助进程不了解 ASP.NET 和托管代码的任何情况,它只是处理 *.aspx 扩展并加载 aspnet_isapi 模块。当 ASP.NET ISAPI 在 IIS 6 进程模型中运行时,它的工作方式有所不同,仅在 w3wp.exe 辅助进程的上下文中加载 CLR。

3 收到请求后,ASP.NET 辅助进程将通知 ASP.NET ISAPI,它将为请求服务。通知通过同步 I/O 实现。之所以使用同步模型,是因为请求只有在 ISAPI 内部请求表中被标记为“executing”,辅助进程才能开始处理它。如果请求已经由特殊的辅助进程进行处理,则不能再将它指定到其他进程,除非原始进程已取消。

4 完成后,响应被发送到打开了异步管道的 aspnet_isapi。现在,请求的状态变为“Done”,之后将从请求表中被删除。如果辅助进程崩溃,正在处理的所有请求仍将保持“executing”状态并持续一段时间。如果 aspnet_isapi 检测到辅助进程已取消,它将自动终止请求并释放所有相关的 IIS 资源。

5 最后,ISAPI获取了响应(就是经过asp.net运行库所处理后的html内容)后,把响应返回给IIS,IIS将继续处理它的内容,解析所需相关文件,并且把所有的数据发送给客户端。然后关闭连接。


从上面的叙述可以知道,最终要的步骤是Asp.net处理的那一段过程,就是当asp.net的ISAPI启动处理进程后发生了什么事