服務器的監(jiān)聽(IIS6.0+版本)
當請求到達服務器時,請求最終會到達TCPIP.SYS驅(qū)動程序,TCPIP.SYS將請求轉(zhuǎn)發(fā)給HTTP.SYS網(wǎng)絡驅(qū)動程序的請求隊列中(可以理解為專門處理http請求的進程),當然在處理請求的過程中,HTTP.SYS進程會維護一個配置表用緩存請求的url和和應用程序池對應的關系。
當一個http請求被捕獲到,HTTP.SYS會讀取配置表,如果對應的應用程序沒有啟動,則HTTP.SYS會啟動IIS相對應的應用程序。具體運行機制可以理解成為:
HTTP.SYS
HTTP.SYS是TCP之上的一個網(wǎng)絡驅(qū)動程序,因此,HTTP.SYS不再屬于IIS(這里說的IIS都是IIS6.0+版本,下文如果不特殊指明,默認為IIS6.0+版本),它已經(jīng)從IIS中獨立了出來。 Http.Sys獨立有以下幾個優(yōu)點:
可靠性: HTTP.SYS運行在內(nèi)核模式下,作為操作系統(tǒng)的驅(qū)動程序運行。因此,HTTP.SYS不會受到用戶代碼的影響,它始終處于穩(wěn)定運行狀態(tài),對用戶的http請求進行監(jiān)聽,并及時作出反應。
高性能: 從用戶發(fā)送http請求到系統(tǒng)返回響應結(jié)果的這一過程都是HTTP.SYS在內(nèi)核模式下完成的。不需要在內(nèi)核模式和用戶模式下進行切換,這樣就極大地節(jié)省了系統(tǒng)資源,提高了請求的響應速度。
IIS處理
W3SVC
W3SVC服務是一個獨立運行的程序,寄宿在svchost.exe進程中,負責用戶的參數(shù)監(jiān)視和重新啟動應用池的工作。 當一個請求進入HTTP.SYS的隊列中,會通知W3SVC服務根據(jù)IIS中的配置去創(chuàng)建對應的應用進程,進行處理。
W3WP.exe
當HTTP.SYS把請求傳遞給IIS時候,W3SVC會啟動對應的應用程序池
當用戶請求的是靜態(tài)文件,如:HTML和圖片等,IIS會直接讀取文件內(nèi)容,轉(zhuǎn)成二進制文件流,返回給HTTP.SYS。
當請求非靜態(tài)文件,如:.aspx。
3-1. w3wp.exe會根據(jù)IIS中ISAPI擴展讀取對應的處理的Dll,用asp.net舉例:當用戶訪問的網(wǎng)站是asp.net平臺,則 類型是.cshtml和.aspx文件類型。根據(jù)配置w3wp.exe會加載aspnet_isapi.dll(簡稱是ISAPI).
IIS中應用程序的映射: