學習IIS工作的原理
我一直都在思考一個問題,當我們在地址欄輸入一個網址點擊回車,網頁加載完的整個過程IIS是怎樣工作的,今天我們就來簡單的探討一下!
1.當我們在地址欄輸入一個網址點擊回車,其實客戶端已經向服務端發送了一個請求(根據請求者的主機頭或者IP或者端口號找到對應的站點)
2.服務端的http.sys接收請求
http.sys:(Kernel的一個組件),它負責監聽來自外部的HTTP請求,根據請求的URl將其轉發給相應的應用程序池(application pool),當此HTTP請求處理完成時,它又負責把處理完成的結果發送出去,為了提供更好的性能,http.sys內部建立了一個緩沖區,將最近的HTTP請求保存起來.
3.http.sys收到請求后,將請求傳給應用程序池的工作進程(inetinfo.exe)
工作進程:工作者進程接收到請求后,首先根據后綴找到並加載對應的ISAPI擴展 (如:aspx 對應的映射是aspnet_isapi.dll),工作者進程加載完aspnet_isapi.dll后,由aspnet_isapi.dll負責加載 ASP.NET應用程序的運行環境即CLR (.NET Runtime)。
ISAPI:能夠處理各種后綴名的應用程序(NOTE:Internet Server Application Programe Interface,互聯網服務器應用程序接口)。它實際上只是一個接口,起到一個代理的作用,它的主要工作是映射所請求的頁面(文件) 和與此后綴名相對應的實際的處理程序。
4.如果靜態頁面htmlIIS的工作進程可以立即處理,找到html頁面返回客戶端顯示,但是如果是.aspx 或cshtml等頁面,IIS不能直接處理,需要先加載aspnet_isapi.dll 應用程序
5.加載完成后ISAPI會啟動一個工作進程,aspnet_isapi.dll 則會通過一個Http PipeLine的管道,將這個Http請求發送給ASPNET_WP.EXE。
6.工作進程進行處理請求
個完整的HTTP請求在ASP.NET Framework的處理過程如下:
HttpRequest ——> inetinfo.exe ——> ASPNET_ISAPI.dll ——> Http Pipeline ——> ASPNET_WP.exe ——> HttpRuntime ——> HttpApplication Factory ——> HttpApplication ——> HttpModule ——> HttpHandler Factory ——> HttpHandler ——> HttpHandler.ProcessRequest()
HTTP Handler提供了類似於ISAPI Server Extention的功能,而HttpModule實現了類似於ISAPI Filter的功能。使用自定義的Handler會覆蓋系統默認的Handler,而Module是可以多個同時存在的。

流程圖



