Asp.net的HTTP请求处理过程
說明:
(1)、客戶端瀏覽器向服務器發出一個Http請求,此請求會被inetinfo.exe進程截獲,然后轉交給 aspnet_isapi.dll進程,接著它又通過Http Pipeline的管道,傳送給aspnet_wp.exe這個進程,接下來就到了.net framework的HttpRunTime處理中心,處理完畢后就發送給用戶瀏覽器。
(2)、當一個http請求被送入到HttpRuntime之后,這個Http請求會繼續被送入到一個被稱之為 HttpApplication Factory的一個容器當中,而這個容器會給出一個HttpApplication實例來處理傳遞進來的http請求,而后這個Http請求會依次進入 到如下幾個容器中:HttpModule --> HttpHandler Factory --> HttpHandler。當系統內部的HttpHandler的ProcessRequest方法處理完畢之后,整個Http Request就被處理完成了,客戶端也就得到相應的東東了。
(3)完整的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請求在HttpModule容器的傳遞過程中,會在某一時刻(ResolveRequestCache事件)將這個 HTTP請求傳遞給HttpHandler容器。在這個事件之后,HttpModule容器會建立一個HttpHandler的入口實例,但是此時并沒有 將HTTP請求控制權交出,而是繼續觸發AcquireRequestState事件以及PreRequestHandlerExcute事件。在 PreRequestHandlerExcute事件之后,HttpModule窗口就會將控制權暫時交給HttpHandler容器,以便進行真正的 HTTP請求處理工作。
而在HttpHandler容器內部會執行ProcessRequest方法來處理HTTP請求。在容器HttpHandler處理完畢整 個HTTP請求之后,會將控制權交還給HttpModule,HttpModule則會繼續對處理完畢的HTTP請求信息流進行層層的轉交動作,直到返回 到客戶端為止。
PS:紅色的HttpApplication實例在HttpModule的Init方法中會用到。
?
(4)如果想在中途截獲一個httpRequest并做些自己的處理,就應該在HttpRuntime運行時內部來做到這一點,確切的說是在HttpModule這個容器中來實現。
轉載于:https://www.cnblogs.com/leibg/archive/2012/11/20/2779341.html
總結
以上是生活随笔為你收集整理的Asp.net的HTTP请求处理过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: awk分割字符
- 下一篇: 给管道注册事件,用于用户是否登录!