開發人員應該對IIS理論層的知識瞭解的多一些~第四講 HttpModel中的幾大事件

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

返回目錄

本文主要介紹HttpModule,它在一個網頁請求過程中是一個怎樣的過程是我們要知道的,在網頁載入過程中HttpModule在何時被執行也是我們要知道的,以及,HttpModule在網頁請求過程中,所被觸發的各個事件也是我們要知道的,下面就帶著問題來看文章吧

ASP.NET對請求處理的過程

當請求一個*.aspx檔案的時候,這個請求會被inetinfo.exe進程截獲,它判斷檔案的尾碼(aspx)之後,將這個請求轉交給 ASPNET_ISAPI.dll(否則交給對應的應用程式去解釋它),ASPNET_ISAPI.dll會通過http管道(Http PipeLine)將請求發送給ASPNET_WP.exe進程,在ASPNET_WP.exe進程中通過HttpRuntime來處理這個請求,處理完 畢將結果返回用戶端。

下面看一個各個術語的含義

inetinfo.exe進程:是www服務的進程,IIS服務和ASPNET_ISAPI.DLL都寄存在此進程中。
ASPNET_ISAPI.DLL:是處理.aspx檔案的win32組件。其實IIS伺服器是只能識別.html檔案的,當IIS伺服器發現被請求的檔案是.aspx檔案時,IIS伺服器將其交給aspnet_isapi.dll來處理。
aspnet_wp.exe進程:ASP.NET架構進程,提供.net啟動並執行託管環境,.net的CLR(通用語言執行平台)就是寄存在此進程中。

aspnet_wp處理一個Http Request的流程

 HttpRequest-->

inetinfo.exe-->

ASPNET_ISAPI.dll-->

ASPNET_WP.exe-->

HttpRuntime-->

HttpApplication Factory-->

HttpApplication-->

HttpModule-->

HttpHandler Factory-->

HttpHandler-->

HttpHandler.ProcessRequest()

通過上面的流程中,我們可以看到HttpModel在何時被執行的。
ASP.NET請求處理過程是基於管道模型的,這個管道模型是由多個HttpModule和HttpHandler組成,ASP.NET把http請求依次傳遞給管道中各個HttpModule,最終被HttpHandler處理,處理完成後,再次經過管道中的HTTP模組,把結果返回給用戶端。我們可以在每個HttpModule中都可以幹預請求的處理過程。

注意:在http請求的處理過程中,只能調用一個HttpHandler,但可以調用多個HttpModule

HttpModule會註冊以下事件

        AcquireRequestState 當ASP.NET運行時準備好接收當前HTTP請求的對話狀態的時候引發這個事件。
        AuthenticateRequest 當ASP.NET 運行時準備驗證使用者身份的時候引發這個事件。
        AuthorizeRequest 當ASP.NET運行時準備授權使用者訪問資源的時候引發這個事件。
        BeginRequest 當ASP.NET運行時接收到新的HTTP請求的時候引發這個事件。
        Disposed 當ASP.NET完成HTTP請求的處理過程時引發這個事件。
        EndRequest 把響應內容發送到用戶端之前引發這個事件。
        Error 在處理HTTP請求的過程中出現未處理異常的時候引發這個事件。
        PostRequestHandlerExecute 在HTTP處理常式結束執行的時候引發這個事件。
        PreRequestHandlerExecute 在ASP.NET開始執行HTTP請求的處理常式之前引發這個事件。在這個事件之後,ASP.NET 把該請求轉寄給適當的HTTP處理常式。
        PreSendRequestContent 在ASP.NET把響應內容發送到用戶端之前引發這個事件。這個事件允許我們在內容到達用戶端之前改變響應內容。我們可以使用這個事件給頁面輸出添加用於所有頁面的內容。例如通用菜單、頭資訊或腳資訊。
        PreSendRequestHeaders 在ASP.NET把HTTP回應標頭資訊發送給用戶端之前引發這個事件。在頭資訊到達用戶端之前,這個事件允許我們改變它的內容。我們可以使用這個事件在頭資訊中添加cookie和自訂資料。
        ReleaseRequestState 當ASP.NET結束所搜有的請求處理常式執行的時候引發這個事件。
        ResolveRequestCache 我們引發這個事件來決定是否可以使用從輸出緩衝返回的內容來結束請求。這依賴於Web應用程式的輸出緩衝時怎樣設定的。
        UpdateRequestCache 當ASP.NET完成了當前的HTTP請求的處理,並且輸出內容已經準備好添加給輸出緩衝的時候,引發這個事件。這依賴於Web應用程式的輸出緩衝是如何設定的。

好了,有了上面的基礎知識之後,相信各位對HttpModule有了一個全新的認識了吧。

返回目錄

開發人員應該對IIS理論層的知識瞭解的多一些~第四講 HttpModel中的幾大事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.