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