在以前的ASP時候,當請求一個*.asp頁面文件的時候,這個HTTP請求首先會被一個名為inetinfo.exe進程所截獲,這個進程實際上就是www服務。截獲之后它會將這個請求轉交給asp.dll進程,這個進程就會解釋這個asp頁面,然后將解釋后的數(shù)據(jù)流返回給客戶端瀏覽器。其實ASP.DLL是一個依附在IIS的ISAPI文件,它負責了對諸如ASP文件,ASA等文件的解釋執(zhí)行,
		ASP.NET的HTTP請求處理方法
		當客戶端向web服務器請求一個*.aspx的頁面文件時,同asp類似,這個http請求也會被inetinfo.exe進程截獲(www服務),它判斷文件后綴之后,把這個請求轉交給ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL則會通過一個Http PipeLine的管道,將這個http請求發(fā)送給ASPNET_WP.EXE進程,當這個HTTP請求進入ASPNET_WP.EXE進程之后,asp.net framework就會通過HttpRuntime來處理這個Http請求,處理完畢后將結果返回給客戶端。
		------------------------------------
		當一個http請求被送入到HttpRuntime之后,這個Http請求會繼續(xù)被送入到一個被稱之為HttpApplication Factory的一個容器當中,而這個容器會給出一個HttpApplication實例來處理傳遞進來的http請求,而后這個Http請求會依次進入到如下幾個容器中:
		HttpModule --> HttpHandler Factory --> HttpHandler
		當系統(tǒng)內(nèi)部的HttpHandler的ProcessRequest方法處理完畢之后,整個Http Request就被處理完成了,客戶端也就得到相應的東東了。
		完整的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()
		如果想在中途截獲一個httpRequest并做些自己的處理,就應該在HttpRuntime運行時內(nèi)部來做到這一點,確切的說時在HttpModule這個容器中做到這個的。
		----------------------------------------
		-------------------------------------
		系統(tǒng)本身的HttpModule實現(xiàn)一個IHttpModule的接口,當然我們自己的類也能夠實現(xiàn)IHttpModule接口,這就可以替代系統(tǒng)的HttpModule對象了。
		ASP.NET系統(tǒng)中默認的HttpModule:
		DefaultAuthenticationModule 確保上下文中存在 Authentication 對象。無法繼承此類。
		FileAuthorizationModule 驗證遠程用戶是否具有訪問所請求文件的 NT 權限。無法繼承此類。
		FormsAuthenticationModule 啟用 ASP.NET 應用程序以使用 Forms 身份驗證。無法繼承此類。
		PassportAuthenticationModule 提供環(huán)繞 PassportAuthentication 服務的包裝。無法繼承此類。
		SessionStateModule 為應用程序提供會話狀態(tài)服務。
		UrlAuthorizationModule 提供基于 URL 的授權服務以允許或拒絕對指定資源的訪問。無法繼承此類。
		WindowsAuthenticationModule 啟用 ASP.NET 應用程序以使用 Windows/IIS 身份驗證。無法繼承此類
------------------------------
新聞熱點
疑難解答