官方解釋:
- 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重定向很容易被搜索引擎誤認為是利用多個域名指向同一網站,那麼你的網站就會被封掉。
總之,除非真是臨時重定向使用302,其他的情況最好還是使用301.
參考資料
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。