1. 程式人生 > >轉:HTTP 301 跳轉和302跳轉的區別

轉:HTTP 301 跳轉和302跳轉的區別

301和302 Http狀態有啥區別?
301,302 都是HTTP狀態的編碼,都代表著某個URL發生了轉移,不同之處在於: 301 redirect: 301 代表永久性轉移(Permanently Moved), 302redirect: 302 代表暫時性轉移(Temporarily Moved ), 當然 Http 狀態 200 標示沒有任何問題發生。  
這兩種轉移在使用的時候有啥好處或者問題?
301 重定向是網頁更改地址後對搜尋引擎友好的最好方法,只要不是暫時搬移的情況,都建議使用301來做轉址。 302 重定向是臨時性轉移。 
在前些年,不少Black Hat SEO曾廣泛應用這項技術作弊,目前,各大主要搜尋引擎均加強了打擊力度,象Google前些年對Business.com以及近來對BMW德國網站的懲罰。即使網站客觀上不是spam,也很容易被搜尋引擎容易誤判為spam而遭到懲罰。 

研究搜尋引擎優化(SEO)的人,應該都知道,301,302 使用不當,或者靈活使用會有不錯的效果的,比如參看下面文章:
302轉向與網址劫持
301轉向和網址規範化301重定向的實現方法
51window提供的301轉向的程式碼
一個網站十幾個域名的重定向經驗談
幾個常用的301重定向

如果是運維人員,配置WEB伺服器的一些設定就可以實現跳轉,比如下面一些關於IIS實現重定向的文章
將請求重定向到檔案、目錄或程式 (IIS 6.0)
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/fbcccfce-6695-4f92-bd55-869d85ff49fb.mspx?mfr=true

重定向參考 (IIS 6.0)
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/41c238b2-1188-488f-bf2d-464383b1bb08.mspx?mfr=true
其他WEB伺服器也可以通過設定實現跳轉,我就不羅列了。


從技術人員來說我們比較常用的跳轉方法有以下幾種:
我們使用 Fiddler 工具來監控的下面提到的幾種方法,看跳轉過程中HTTP狀態碼是301?302?200?:

方法1:Response.Redirect("Test.aspx");
狀態碼 302  臨時性跳轉

方法2:<meta http
-equiv="refresh" content="5; URL=Test.aspx" />
meta fresh: 這在2000年前比較流行,不過現在已很少見。其具體是通過網頁中的meta指令,在特定時間後重定向到新的網頁,如果延遲的時間太短(約5秒之內),會被判斷為spam。這種跳轉方式,整個跳轉過程中,頁面Http狀態都是200,即,頁面沒有任何錯誤發生。

方法3:Server.Transfer("Test.aspx");
這種跳轉方式,整個跳轉過程中,頁面Http狀態都是200,即,頁面沒有任何錯誤發生。

方法4:URLRewrite
這種跳轉方式,整個跳轉過程中,頁面Http狀態都是200,即,頁面沒有任何錯誤發生。

沒有一種是301跳轉。也就是上面幾種跳轉方式都用不到301跳轉的好處。

使用301跳轉有啥好處呢?
SEO(搜尋引擎優化)中提到一點:如果我們把一個地址採用301跳轉方式跳轉的話,搜尋引擎會把老地址的PageRank等資訊帶到新地址,同時在搜尋引擎索引庫中徹底廢棄掉原先的老地址。

如何編碼實現301跳轉呢?
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","..."); 這裡的 ... 表示你要跳轉去的頁面。


參考資料:
301永久重定向實現方式及302重定向