衆所周知,一個完整的動態網頁的從請求到響應無非包括如下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網站的性能的優化都會有必定的指導做用。