ASP.NET请求与处理全过程分析
1.用户向服务器的某IP端口发送请求,此端口通过Http.sys来管理,请求报文被Http.sys接收,Http.sys在注册表中找能处理这个请求类型的应用程序,最终找到IIS,请求被提交到IIS服务器处理,IIS判断请求的类型。
如果请求的是静态文件,那么IIS会直接处理,在本地找到请求的静态文件,然后发送给浏览器。
如果是动态文件,如aspx或者ashx等动态文件,IIS就会去它的映射表里面去找,实现它接口的那个扩展程序可以处理这样的动态文件,然后IIS发现有个叫做aspnet_isapi的一个扩展程序可以处理处理像.aspx和.ashx这样后缀名的文件,那么IIS则把请求交给aspnet_isapi来处理。
2.aspnet_isapi将启动CLR(公共语言运行时),CLR负责启动asp.net框架的域,然后将请求交给asp.net框架来处理,框架里面有个一HttpRuntime类的对象,拿到用户的请求后,它负责将请求封装成HttpContext对象,调用application对象的ProcessRequest方法(HttpContext对象作为参数)处理请求,最后处理完成后,返回给IIS,IIS再返回给浏览器,浏览器解析渲染呈现给用户。
补充说明:
Http.sys是一个位于Win2003和WinXP SP2中的操作系统核心组件,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。
Http.sys的好处:
1. 缓存 - 静态的内容现在被缓存于内核模式下,这使服务响应速度更快
2. 记录 (Log)-IIS的log功能更快且标准化了
3. 带宽控制 - greater scalability control and throttling
4. 可靠性 - 所有的服务请求会在Http.sys里暂存入队列,而不是由服务程序本身来处理,这样,即使服务程序重启,尚未被处理的请求也不会丢失了
5. IP端口重用 - 现在,只要是通过Http.sys管理的端口(基本包括了那些著名的端口,比如80),都可以同时允许多个程序同时监听了。