ASP.NET中Response.Redirect()方法深度剖析
本文中,我們將借助http分析工具Fiddler,來對Response.Redirect()方法的整個流程進(jìn)行剖析
首先在Visual Studio中新建一個網(wǎng)站,在Default頁面的Page_Load事件中寫下Response.Redirect("http://www.baidu.com");
然后添加一個Page_LoadComplete事件處理方法。
最終效果如下:
在12和17行設(shè)置了斷點,方便對整個過程進(jìn)行觀察。
打開Fiddler,用以觀察整個過程中的HTTP數(shù)據(jù)。
點擊“調(diào)試”按鈕
程序開始執(zhí)行。
這時Fiddler中出現(xiàn)了一條數(shù)據(jù):
這是瀏覽器向http://localhost:53765/WebSite2/Default.aspx 發(fā)出了一個GET請求。
這條THHP GET請求導(dǎo)致服務(wù)器端的程序開始執(zhí)行,執(zhí)行到12行時遇到斷點,于是停下,此時還沒有執(zhí)行Response.Redirect語句。
這時候服務(wù)器還沒有對剛才瀏覽器發(fā)出的請求作出響應(yīng),所以在Fiddler中,并沒有讀到這次HTTP請求的響應(yīng)。
然后我在服務(wù)器端按F5,使程序繼續(xù)執(zhí)行。當(dāng)程序執(zhí)行了Response.Redirect語句之后,在Fiddler中收到了服務(wù)器端的回應(yīng)。
很明顯,服務(wù)器端并沒有返回給我們頁面的Default頁面的html數(shù)據(jù),而是給了一個302 Found,并在Location中給出了“http://www.baidu.com”, 這就是在告訴瀏覽器:請重新發(fā)出一個HTTP請求,所請求的URL為"http://www.baidu.com"
瀏覽器于是按照吩咐,重新發(fā)出了一個http的請求
這次是向百度的服務(wù)器發(fā)出了一個GET請求。
然后百度返回了如下數(shù)據(jù):
這次是200 OK,content-type 是html,后邊跟的是百度主頁的html代碼
然后瀏覽器根據(jù)這個返回數(shù)據(jù),解析html代碼,在我們的屏幕上將百度的樣子顯示了出來
并且,這個過程中我們注意到:Page_LoadComplete()方法并沒有被執(zhí)行,這說明當(dāng)服務(wù)器執(zhí)行到Response.Redirect語句時,會立即中斷頁面的生命周期,直接向客戶端返回信息,讓客戶端進(jìn)行重定向操作。
整個過程就是這樣了。
另外
ASP.NET 4 增加了一個RedirectPermanent方法,該方法同樣是重定向,但生成的HTTP響應(yīng)狀態(tài)不是上邊所演示的302,而是301(永久跳轉(zhuǎn))
301是對搜索引擎最友好的重定向方式。
那么什么叫做對搜索引擎友好呢?
比如你有個網(wǎng)站http://www.foo.com ,當(dāng)人們訪問http://www.foo.com 這個URL時,你就把他們重定向到http://www.foo.com/widgets/,那么當(dāng)搜索引擎爬到http:www.foo.com這個網(wǎng)址時,如果它不能很好地跟隨重定向,則它將認(rèn)為http://www.foo.com頁面時沒有內(nèi)容的,所以這個頁面的排名將會非常靠后。
如果我們把一個地址采用301 跳轉(zhuǎn)方式跳轉(zhuǎn)的話,搜索引擎會把老地址的PageRank等信息帶到新地址,同時在搜索引擎索引庫中徹底廢棄掉原先的老地址。
這只是很簡單的敘述,其實關(guān)于搜索引擎友好的問題很復(fù)雜,欲了解更多請自行搜索之。
評論: Response.Redirect的實質(zhì)是拋了一個異常 從它中斷生命周期來看,確實是拋了個異常。Response.Redirect這種重定向方式有時候會出問題,尤其是當(dāng)客戶端不是桌面瀏覽器的時候。 Fiddler怎么配置成本機也可以檢測 在localhost后面加個點Fiddler就能攔截請求了。例如:http://localhost.:3435/Login.aspx。就OK啦。 會報線程中止的錯誤,可以使用Response.Redirect("URL",false);
第二個參數(shù)表示繼續(xù)執(zhí)行頁面生命周期
總結(jié)
以上是生活随笔為你收集整理的ASP.NET中Response.Redirect()方法深度剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一万元一年利息多少
- 下一篇: asp.net ajax控件工具集 Au