天天看點

Http請求流程(摘錄)

Http請求到達IIS時發生什麼

當請求到達iis時,iis首先要确定如何處理請求。判斷的依據就是請求檔案的字尾,iis根據檔案字尾名确定由誰去處理此次請求。IIS本身可以處理某些類型的請求,如HTML 頁面、圖像以及其他靜态内容等,或者将請求路由到ISAPI擴充(Internet Server Application Programe Interface,網際網路伺服器應用程式接口),由ISAPI擴充響應此請求。例如,asp.net頁面路由到aspnet_isapi.dll ISAPI擴充,由該擴充響應頁面請求。ISAPI擴充響應結束後,将結果傳回給IIS,最終由IIS将結果(HTML頁面)傳回給客戶。

ISAPI擴充是非托管的編譯類,該類的主要作用就是響應某種類型的http請求,并将結果傳回給IIS。從本質上講,ISAPI并不是真正的應用程式,而隻是一種接口,用于影射某種類型的頁面或檔案與實際處理程式之間的對應關系。

ISAPI 篩選器,像ISAPI 擴充一樣,是在 Web 伺服器接收到 HTTP 請求時進行響應的程式。但不同于 ISAPI 擴充,ISAPI 篩選器總在伺服器程序中運作。ISAPI 篩選器不同于應用程式,因為它們是由 Web 伺服器事件驅動,而不是由用戶端請求驅動的。可以将 ISAPI 篩選器與特定 Web 伺服器事件關聯;每次發生關聯事件時都将通知篩選器。例如,當讀或寫事件發生時将通知篩選器并由其對将傳回給用戶端的原始資料進行加密。ISAPI 篩選器可以應用于很多方面,包括: 身份驗證和授權、記錄和監視、HTTP 壓縮、URL 重寫。。。。

管道(Pipeline)

當Http請求進入 Asp.Net Runtime以後,它的管道由托管子產品(Managed Modules)和處理程式(Handlers)組成,并且由管道來處理這個 Http請求。

Http請求流程(摘錄)

1. HttpRuntime将Http請求轉交給 HttpApplication,HttpApplication代表着程式員建立的Web應用程式。HttpApplication建立針對此Http請求的 HttpContext對象,這些對象包含了關于此請求的諸多其他對象,主要是HttpRequest、HttpResponse、HttpSessionState等。這些對象在程式中可以通過Page類或者Context類進行通路。、

2. 接下來Http請求通過一系列Module,這些Module對Http請求具有完全的控制權。這些Module可以做一些執行某個實際工作前的事情。

3. Http請求經過所有的Module之後,它會被HttpHandler處理。在這一步,執行實際的一些操作,通常也就是.aspx頁面所完成的業務邏輯。可能你會覺得在建立.aspx頁面并沒有體會到這一過程,但是,你一定知道,.aspx 頁面繼承自Page類,我們看一下Page類的簽名:

public class Page : TemplateControl, IHttpHandler

{

    // 代碼省略

}

可以看到,Page類實作了IHttpHandler接口,HttpHandler也是Http請求處理的最底層。

4.HttpHandler處理完以後,Http請求再一次回到Module,此時Module可以做一些某個工作已經完成了之後的事情。

簡化後處理流程圖

Http請求流程(摘錄)

一個http請求可以經過多個module,但是最後隻能被一個handler處理

繼續閱讀