Http请求处理流程
從一個頁面比如www.xuxiaoyu.net的請求開始如何就能打開blogs頁面的呢?這其中發生了什么樣的東西?
Http請求(Http Request)
當服務器(IIS)接受到一個Http請求的時候進行以下步驟的處理:
1)服務器獲取所請求的頁面的后綴名(因為可能是.ASPX,.JPG等不僅僅是ASPX頁面)
2)服務器會尋找處理該后綴名的應用程序,如果服務器沒有找到這類的后綴名處理程序,并且這個文件也不是受保護的那么將直接返回給客戶端。
3)能夠處理這類后綴名的應用程序叫做ISAPI應用程序(Internet Server Application Programe Interface),他實際上時一個接口,起到一個代理的作用,主要就是把對應的請求映射到相對應的實際處理程序上去。當一個請求找到一個對應的ISAPI那么他就執行把該請求交給對應的ISAPI進行處理。
我們所常用的.aspx文件是由aspnet_isapi.dll這個程序來處理的。ASP.NET只是IIS的一個組成部分,他是ISAPI的一個擴展而已不是全部。
Http.SYS
那么IIS是如何獲取外部的HTTP請求的呢?這個就要依靠HTTP.SYS這個驅動程序了。
1)在操作系統啟動的時候,IIS會在HTTP.SYS中注冊自己的虛擬路徑
2)當一個請求是一個可訪問的URL,那么HTTP.SYS就會將這個請求交給IIS工作者進程。(IIS6.0,7.0是W3WP.EXE,5.0是aspnet_wp.exe).每個工作者進程都有一個身份標識,以及一系列的可選參數(比如回收機制的設置,超時設置等)
3)后面的步驟,就是執行上面ISAPI所說的過程了。
從上面可以看出HTTP.SYS是一個內置的驅動程序,他是用來監聽外部對IIS的請求的。
4)ISAPI除了進行程序映射外還進行一些其他的操作,從HTTP.SYS中獲取當前HTTP請求信息,并且將這些信息保存到HttpWorkerRequest類中,在相互隔離的AppDamain中加載HttpRuntime,調用HttpRuntime的ProcessRequest方法。
5)然后就執行我們程序員所寫的代碼了
6)IIS接受返回數據流,并且重新返回給HTTP.SYS,最后HTTP.SYS再將這些數據返回給客戶端瀏覽器。
HTTP管道(Pileline)
當一個Http請求到達程序后事怎么處理的呢?
當Http請求進入到Asp.net Runtime以后,它由托管模塊(HttpModule)和處理程序(HttpHandler)組成,并且由管道來處理這個Http請求。
整個數據的流動如圖所示:
1)HttpRuntime將Http請求轉交給HttpApplication(代表著我們創建的web應用程序)。HttpApplication創建針對此Http請求的HttpContext上下文對象用來保存請求的其他對象比如HttpRequest,HttpResponse,HttpSessionState.
2)Http請求通過一系列的Module,這些Module對這個Request具有完全控制權限。然后做一些當前Handler之前的事。
3)Http請求經過所有的HttpModule之后就被HttpHandler處理。
4)然后再返回給HttpModule做一些當前Handler之后的事
總結
以上是生活随笔為你收集整理的Http请求处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#多线程之旅(2)——详解线程的开始和
- 下一篇: 大数据-----软件开发模型(详细讲解)