众所周知,一个完整的动态网页的从请求到响应无非包括如下3个步骤:web
一、浏览器客户端发出http请求。windows
二、IIS服务端接受请求。api
三、处理请求并输出请求结果到浏览器客户端。浏览器
首先,简单的说说我所理解的IIS,它依赖于Windows服务World Wide Web Publish Service的,并依赖于进程w3wp.exe的。也就是说IIS的运行离不开工做进程w3wp.exe,同时每一个IIS站点下的应用程序都是被用用程序池进行隔离,应用程序池即w3wp.exe的容器,经过池隔离的机制保证当某个应用程序池出错即网站出现错误或进程资源回收时候,不会影响到其余应用程序池中的应用正常访问,接下来讲说具体的IIS处理细节:服务器
一、从IIS6.0版本开始,引入了文件HTTP.SYS(一个位于Win2003和WinXP SP2中核心组件,据我了解支持IIS的操做系统中均有此文件,它可以让任何应用程序经过它提供的接口,以http协议进行信息通信)。当浏览器发出请求地址,地址自动解析到某台IP对应的服务器,该服务器中的IIS站点会自动触发文件HTTP.SYS,此时的HTTP.SYS会自动寻找到对应的应用程序池ID,这里的应用程序池ID是在开发者活实施人员部署这个站点站点以后已自动注册到HTTP.SYS,因此HTTP.SYS才能准确的应用程序池定位。所以一个HTTP.SYS是对应到多个应用程序池的。ide
二、当应用程序池接收到用户发来的请求后,会接着传给工做进程,即w3wp.exe进程,该进程检查来请求的URL后缀以肯定加载哪一个ISAPI扩展。ASP.NET加载时会附带本身的ISAPI扩展(aspnet_isapi.dll),以便在IIS中映射,这个映射能够在IIS的管理中心进行配置与查看。性能
三、一旦工做进程加载了aspnet_isapi.dll, 就会构造一个HttpRuntime类,该类是应用程序的入口,经过ProcessRequest方法处理请求。优化
四、方法ProcessRequest被调用后,一个HTTP上下文对象即HttpContext的实例就产生了。可经过HTTPContent.Current获取到这个实例,且该实例会在整个生命周期中存活,咱们经过它能够获取到一些经常使用对象,如Request,Response,Session 等。网站
五、以后HttpRuntime会经过HttpApplicationFactory类加载一个HttpApplication对象。每一次请求都要穿过一堆HttpModule到达HttpHandler,以便被响应。而这些HttpModule就被配置在HttpApplication中。同时,开发者也可自定义HttpModule从而来完成一些特殊的http拦截与相应的处理。spa
六、全部请求穿过HttpModule需抵达相应的HttpHandler,而后HttpHandler根据请求资源,产生并输出内容。
完成整个步骤后,ASP.NET页面生命周期就开始了。
我的总结:对于IIS处理机制的理解有助于加深开发人员对于Form验证、windows验证模式、HTTP拦截处理的原理的认识,以及IIS网站的性能的优化都会有必定的指导做用。