ASP.NET 框架 之 HTTP運行期與頁面執行模型

HTTP運行期

HTTP運行期處理客戶端應用程序(例如Web瀏覽器)進入的一個Web請求,通過處理它的應用程序的適當組件路由請求,然後產生響應併發回提出請求的客戶端應用程序。

進入的HTTP Web請求最先由IIS Web服務器接收到,它在此請求基於ASP.NET已註冊處理的擴展名傳送到ASP.NET ISAPI上。

HTTP運行期首先創建一個HttpContext對象的實例,它包含了當前正在處理的請求信息,接着創建在處理邏輯中涉及到的所有其他組件都可以使用的上下文對象。HttpContext實例提供了對請求對象(HttpRequest類的實例)和響應對象(HttpResponse類的實例)的訪問。

HTTP運行期集成由稱爲HTTP模塊(HTTP Module)的組件構成的處理管線,用於執行請求預處理動作(如:高速緩存的查詢和授權)和後處理動作(如:更新調整緩存)。這些組件實現IHttpModule接口。在管線中,每個模塊處理不同的全局應用層次和特定請求事件來執行其邏輯。

HTTP運行期基於請求的URL還選擇一個HTTP處理程序(實現IHttpHandler接口的組件)或HTTP處理程序工廠(實現IHttpHandlerFactory接口的組件)來完成引入請求的實際處理過程。處理程序用HttpContext對象來收集請求信息、並寫出響應的結果。

 


1ASP.NET Web 應用程序中的請求處理過程

注意:在http請求的處理過程中,只能調用一個HttpHandler,但可以調用多個HttpModule。
當請求到達HttpModule的時候,系統還沒有對這個請求真正處理,但是我們可以在這個請求傳遞到處理中心(HttpHandler)之前附加一些其它信息,或者截獲的這個請求並作一些額外的工作,也或者終止請求等。在HttpHandler處理完請求之後,我們可以再在相應的HttpModule中把請求處理的結果進行再次加工返回客戶端。

 

一個HTTP請求的處理過程

當一個HTTP請求被送入HttpRuntime之後,這個HTTP請求會繼續被送入到一個被稱爲HttpApplicationFactory的容器中。而這個窗口會給出一個HttpApplication實例來處理傳遞進來的HTTP請求,而後這個HTTP請求會依次進入如下幾個容器中:

HttpModule ——> HttpHandler Factory ——> HttpHandler

當系統內部的HttpHandlerProcessResquest的方法處理完畢之後,整個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()

 

頁面執行模型

頁面執行模型由頁面HTTP處理程序工廠開始,它註冊HTTP運行期以爲所有.aspx文件處理請求。頁面處理程序工廠負責創建一個Page對象的實例,這是將最終處理請求所生成響應結果的HTTP處理程序。

首先頁面處理程序工廠嘗試在與請求的.aspx文件相關的.NET高速緩存內查找以前編譯過的頁面類。當查找失敗時,就像第一次請求一樣,處理程序工廠將讀取和解析文件,並創建一棵解析樹(parse tree)。解析樹類似於控件樹,但是並不包含控件,解析樹包含稱爲控件生成器(control builder)的對象實例。控件生成器包含了在解析過程期間收集的相關控件信息。然後通過Page指令中的Language attribute,用與頁面相關的語言把解析樹轉變爲代碼。然後,頁面處理程序工廠調用適當的編譯程序,動態地編譯從Page中得到的類,頁面處理程序工廠還將新建的類放置到ASP.NET調整緩存中,並且把高速緩存記錄和文件相關性關聯起來。文件相關性監視.aspx文件做出的變化,並保證任何變化都自動地使高速緩存記錄無效,在下次請求時這些記錄將再次解析修改過的文件。

 


2:頁面如何處理請求

發佈了124 篇原創文章 · 獲贊 7 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章