1. 程式人生 > 實用技巧 >http狀態碼301和302-轉

http狀態碼301和302-轉

核心:
除非真是臨時重定向使用302,其他的情況最好還是使用301. 301重定向告訴查詢引擎,這個地址棄用了,永遠轉向一個新地址,可以轉移新域名的權重。而302重定向很容易被搜尋引擎誤認為是利用多個域名指向同一網站,那麼你的網站就會被封掉,罪名是“利用重複的內容來干擾Google搜尋結果的網站排名”

定義

301 redirect: 301 代表永久性轉移(Permanently Moved)

302 redirect: 302 代表暫時性轉移(Temporarily Moved )

共性

301和302狀態碼都表示重定向,就是說瀏覽器在拿到伺服器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址可以從響應的Location首部中獲取(使用者看到的效果就是他輸入的地址A瞬間變成了另一個地址B)——這是它們的共同點。

區別

301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜尋引擎在抓取新內容的同時也將舊的網址交換為重定向之後的網址

302表示舊地址A的資源還在(仍然可以訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜尋引擎會抓取新的內容而儲存舊的網址

場景

場景一 想換個域名,舊的域名不用啦,這樣使用者訪問舊域名時用301就重定向到新的域名。其實也是告訴搜尋引擎收錄的域名需要對新的域名進行收錄。 場景二 登入後重定向到指定的頁面,這種場景比較常見就是登入成功跳轉到具體的系統頁面。 場景三 有時候需要自動重新整理頁面,比如5秒後回到訂單詳細頁面之類。 場景四 有時系統進行升級或者切換某些功能時,需要臨時更換地址。
場景五 像微博之類的使用短域名,使用者瀏覽後需要重定向到真實的地址之類。

演示

public void doGet(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
    //請求重定向的例子  
    response.setStatus(301); 
    response.setHeader("Location", "http://127.0.0.1/login.htm");
}

在使用者訪問後瀏覽器都會重定向到http://127.0.0.1/login.htm

301與302在選擇上注意的問題

302 重定向和網址劫持(URL hijacking)從網址A 做一個302 重定向到網址B 時,主機伺服器的隱含意思是網址A 隨時有可能改主意,重新顯示本身的內容或轉向其他的地方。大部分的搜尋引擎在大部分情況下,當收到302重定向時,一般只要去抓取目標網址就可以了,也就是說網址B。如果搜尋引擎在遇到302 轉向時,百分之百的都抓取目標網址B 的話,就不用擔心網址URL 劫持了。問題就在於,有的時候搜尋引擎,尤其是Google,並不能總是抓取目標網址。比如說,有的時候A 網址很短,但是它做了一個302重定向到B網址,而B網址是一個很長的亂七八糟的URL網址,甚至還有可能包含一些問號之類的引數。很自然的,A網址更加使用者友好,而B網址既難看,又不使用者友好。這時Google很有可能會仍然顯示網址A。由於搜尋引擎排名演算法只是程式而不是人,在遇到302重定向的時候,並不能像人一樣的去準確判定哪一個網址更適當,這就造成了網址URL劫持的可能性。也就是說,一個不道德的人在他自己的網址A做一個302重定向到你的網址B,出於某種原因, Google搜尋結果所顯示的仍然是網址A,但是所用的網頁內容卻是你的網址B上的內容,這種情況就叫做網址URL 劫持。你辛辛苦苦所寫的內容就這樣被別人偷走了。302重定向所造成的網址URL劫持現象,已經存在一段時間了。不過到目前為止,似乎也沒有什麼更好的解決方法。在正在進行的谷歌大爸爸資料中心轉換中,302 重定向問題也是要被解決的目標之一。從一些搜尋結果來看,網址劫持現象有所改善,但是並沒有完全解決。

參考

https://www.cnblogs.com/lanqiu5ge/p/9457074.html#_label5

https://www.cnblogs.com/5207/p/5908354.html

https://www.cnblogs.com/lanqiu5ge/p/9457074.html#_label5