ASP.Net 請求響應(yīng)流程簡述
一、瀏覽器請求頁面的簡單流程
當(dāng)瀏覽器請求靜態(tài)頁面時,會發(fā)送請求給服務(wù)器軟件,服務(wù)器軟件直接去找對應(yīng)的靜態(tài)頁面,并返回給瀏覽器。
當(dāng)瀏覽器請求動態(tài)頁面時,服務(wù)器軟件收到請求,發(fā)現(xiàn)處理不了.aspx文件,就去映射表當(dāng)中根據(jù)后綴名找對應(yīng)的處理程序(aspnet_isapi.dll),這個處理程序?qū)崿F(xiàn)了服務(wù)器軟件提供的接口,即服務(wù)器軟件通過接口調(diào)用了這個處理程序當(dāng)中的方法。aspnet_isapi.dll會將請求轉(zhuǎn)交給.Net Framework,由它處理動態(tài)頁面,創(chuàng)建頁面對象,生成相應(yīng)報文,響應(yīng)給瀏覽器。
當(dāng)服務(wù)器接收到瀏覽器的動態(tài)頁面請求時,去網(wǎng)站的程序集中找對應(yīng)的類,通過反射的方式創(chuàng)建類的對象,并運行ProcessRequest方法處理用戶的需求,最后通過Write方法輸出響應(yīng)數(shù)據(jù)。
執(zhí)行Write時,會把數(shù)據(jù)放入緩存區(qū),頁面執(zhí)行完畢后一次性返還給瀏覽器。
二、一般處理程序的IHttpHandler接口
服務(wù)器接收請求,要創(chuàng)建頁面對象的時候,發(fā)現(xiàn)每一個文件都是一個類,它不知道如何去調(diào)用方法創(chuàng)建頁面,于是就需要一個中間處理——將頁面類的對象轉(zhuǎn)成一個接口IHttpHandler類型,然后通過調(diào)用接口中的方法來實現(xiàn)處理。
一般處理程序是一個實現(xiàn)了IHttpHandler特殊接口的類,凡是實現(xiàn)了這個接口的類,都能作為一個外部請求的目標(biāo)程序。
如果被請求的類沒有實現(xiàn)這個接口,在轉(zhuǎn)換的時候就會出錯,提示沒有實現(xiàn)IHttpHandler接口。所以,一般處理程序里的方法,實際上是實現(xiàn)了IHttpHandler中的方法。
三、一般處理程序細節(jié)
IHttpHandler是重要的接口,context封裝了所有瀏覽器發(fā)來的請求報文,ProcessRequest方法表示頁面被訪問時調(diào)用這個方法里的代碼段,是個入口。Context.Response是對輸出的封裝,ContextType是響應(yīng)報文中的ContextType值,是響應(yīng)輸出的方式。
IsReusable是IHttpHandler中的另一個方法,設(shè)置頁面是否可以重用,以減少多次訪問時Web服務(wù)器的壓力。
四、詳細請求流程
服務(wù)器接收到用戶請求,aspnet_isapi.dll將請求移交給Application Domain,它會間接調(diào)用HttpRuntime的靜態(tài)方法處理用戶的請求。
首先,分析請求報文,并把請求報文封裝成HttpWorkerRequest對象,之后拆解請求報文,將各個字段封裝位HttpRequest對象(這個對象包含QueryString和Form方法)。
HttpRequest對象和HttpResponse對象等,共同組成了HttpContext對象。
HttpApplicationFactory類查找Application池中有沒有現(xiàn)成可用的HttpApplication對象,如果有就直接拿來用,如果沒有,就創(chuàng)建一個。HttpApplication對象中有ProcessRequest方法,這個方法有HttpContext對象。正好拿剛才的來用。
HttpApplication對象進入請求管道,先后執(zhí)行19個委托事件,在第8個事件時創(chuàng)建被請求頁面的對象,在第11和12個事件之間執(zhí)行被創(chuàng)建對象的ProcessRequest方法。
五、WebForm的頁面生命周期
在請求管道的第11個事件執(zhí)行被創(chuàng)建頁面類的PeocessRequest方法后,會調(diào)用BuildControlsTree方法進入頁面的生命周期。
在頁面生命周期中會連續(xù)調(diào)用一連串的事件,其中一個Render方法會去遍歷整個控件樹,生成對應(yīng)的HTML代碼,最后組合成為整個頁面的HTML代碼返還給瀏覽器。
相關(guān)文章
.net 像hao123的快捷郵箱登陸的實現(xiàn)代碼
.net實現(xiàn)的像hao123的快捷郵箱登陸的代碼,需要的朋友可以參考下。2010-03-03.net core版 文件上傳/ 支持批量上傳拖拽及預(yù)覽功能(bootstrap fileinput上傳文件)
本篇內(nèi)容主要解決.net core中文件上傳的問題 開發(fā)環(huán)境:ubuntu+vscode.本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2017-03-03ASP.NET技巧:請求網(wǎng)址并解析返回的html
ASP.NET技巧:請求網(wǎng)址并解析返回的html...2006-09-09基于ASP.NET實現(xiàn)日期轉(zhuǎn)為大寫的漢字
在寫代碼時遇到一個需要將日期轉(zhuǎn)換為中文大寫日期的問題,網(wǎng)上找了找,示例不是很多,只有javascript代碼的,下面整理下在ASP.NET中怎么實現(xiàn)。2016-08-08C#,winform,ShowDialog,子窗體向父窗體傳值
窗體的show方法,沒有給調(diào)用代碼任何通知,如果需要通知,使用showdialog是一種好的選擇。 在調(diào)用show方法后,show方法后面的代碼會立即執(zhí)行,2008-08-08ASP.NET MVC使用ActionFilterAttribute實現(xiàn)權(quán)限限制的方法(附demo源碼下載)
這篇文章主要介紹了ASP.NET MVC使用ActionFilterAttribute實現(xiàn)權(quán)限限制的方法,結(jié)合實例形式分析了ASP.NET MVC使用ActionFilterAttribute過濾類實現(xiàn)權(quán)限限制的步驟與相關(guān)技巧,并附帶demo源碼供讀者下載,需要的朋友可以參考下2016-04-04- 前兩天看了一個自定義分頁控件,和AspNetPager一樣是實現(xiàn)IPostBackEventHandler接口,不過簡潔許多,就想能不能實現(xiàn)ICallbackEventHandler接口做到無刷新分頁呢?想到了就馬上去做,終于,設(shè)想變成了現(xiàn)實?。?/div> 2010-03-03
Asp.Net如何將多個RadioButton指定在一個組中
將多個RadioButton指定在一個組中,實現(xiàn)其實很簡單,一句代碼即可,具體如下,希望對大家有所幫助2013-12-12最新評論