一次http请求的全过程(附mmap文件下载)

这几天看了一些资料,梳理了下web方面的知识,发现很多东西都是知表面而不知背后真正的原理,于是用MindManager画了这幅图,不是很完整,不过在理解的过程中会陆续更新这张图(可点击或者另存为后查看大图),

看了godspeed的关于asp.net生命周期的一个系列很形象收获颇丰,零散的记录些重点以便复习:

服务器接收到来自浏览器端的请求根据后缀名是.aspx来确定接下来的工作交由ASP.NET处理ASP.NET先创建一个Context对象然后创建一个Request对象放到Context对象中,它包含了IIS传递给它的所有信息本次请求header + body接着又创建一个Respone对象用来装HTML,并放进Context中      


IIS是怎么识别.aspx的过程:

请求到达IIS时候会根据应用程序配置找到.aspx对应的处理程序aspnet_isapi.dll

aspnet_isapi.dll创建并监视并持续监视一个aspnet_wp.exe进程(asp.net最重要的组件:worker process,几乎所有的工作都是在这个进程中完成,它在IIS6中被改名叫做w3wp.exe)IIS6则通过内核模式中的HTTP.SYS来“看”那些进来的Request。HTTP.SYS把进来的Request发送到相应的Application Pool(应用程序池)。应用程序池再把Request传递给aspnet_isapi来进行创建worker process的工作。IIS6中的worker process已经是w3wp.exe了。aspnet_isapi.dll在创建了worker process加载了CLR完成了托管环境的布局后,就什么都不管了。

Worker process开始管理一切,它把所有的工作都交给了HttpRuntime。

HttpRuntime雇佣了项目经理HttpApplication。然后,HttpRuntime并不是什么工作都没有做,它已经通过配置文件创建了所有的HttpModule并填写在了HttpApplication的“工作列表”中,项目经理HttpApplicaiton事根据这个列表来工作的。HttpRuntime也创建了HttpContext这个箱子并交给了项目经理HttpApplication

HttpRuntime所做的事情:

1,打造了HttpContext这个箱子来存储Request和Response

2,建立了工作列表HttpModule(通过配置文件创建了所有的HttpModule并填写在了HttpApplication的"工作列表"中)

3,雇佣了项目经理HttpApplication并把箱子Context交给它,然后把工作列表作为效绩考核列表也交给他。

4,等着返回结果

mmap文件下载:

 一次http请求的全过程.mmap

看到本文的朋友如果觉得有错误请留言指出,谢谢

posted @ 2011-02-12 19:11  三桂  阅读(3375)  评论(0编辑  收藏  举报