從今天開始要和大家一起學習一下DC.Web.HttpCompress 壓縮模組的源碼。同時也希望大家一起討論~
1.首先說一下整個流程。我們都知道當在瀏覽器敲下頁面的網址後會發生如下事情
瀏覽器向伺服器發出http請求,伺服器找到頁面,讀取後返回給瀏覽器。當瀏覽器下載完成後就開始載入和渲染Html,如果碰到css,js引用會再次發出請求下載css和js檔案,我們就是要在請求頁面和請求css和js檔案的時候做一些“手腳”。
2.既然是在處理請求的時候做手腳,那麼我們必須熟悉asp.net的處理流程,很好的展示了這個流程
當我們向伺服器請求aspx頁面時,http請求會被inetinfo.exe進程捕獲,交給你自己註冊的ISAPI,aspx預設處理的ISAPI為aspnet_isapi.dll。而aspnet_isapi.dll則會通過一個叫做Http PipeLine(管線)的東西將這個請求發送給ASPNET_WP.EXE進程,然後framework通過HttpRuntime處理這個請求,處理完畢後將結果返回給用戶端。
當http請求被送入HttpRuntime後,請求繼續被送入HttpApplication Factory容器當中,而這個容器給出一個HttpApplication執行個體來處理請求,然後依次進入到HttpModule—>HttpHandler Factory—>HttpHandler。
當HttpHandler內的ProcessRequest方法處理完畢後,整個HttpRequest就被處理完了~~
3.那麼要想實現壓縮模組我們要怎樣設計流程呢?
我提兩點,大家先思考思考,下一篇開始進入源碼階段。
a)每個請求都會交給一個HttpHandler處理,這也是處理請求的最理想地點。
b)在HttpModule裡可以註冊生命週期裡的每個事件。類似於
public void Init(HttpApplication app)
{
app.BeginRequest += new EventHandler(app_BeginRequest);
}
4.考慮時間..........................