http狀態碼301和302詳解及區別

見:https://blog.csdn.net/grandPang/article/details/47448395

 

 一直對http狀態碼301和302的理解比較模糊,在遇到實際的問題和翻閱各種資料瞭解後,算是有了一定的理解。這裏記錄下,希望能有新的認識。大家也共勉。

 

官方的比較簡潔的說明:

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

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

        ps:這裏也順帶記住了兩個比較相近的英語單詞(permanently、temporarily),嘻哈!

 

        詳細來說,301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址可以從響應的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另一個地址B)——這是它們的共同點。他們的不同在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換爲重定向之後的網址;302表示舊地址A的資源還在(仍然可以訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。

 

 

      這裏開啓傻瓜自問自答模式(自己可能想到的疑問):

1、什麼是重定向啊?

        就是地址A跳轉到地址B啦。百度百科的解釋:重定向(Redirect)就是通過各種方法將各種網絡請求重新定個方向轉到其它位置(如:網頁重定向、域名的重定向、路由選擇的變化也是對數據報文經由路徑的一種重定向)。

 

2、可是,爲什麼要進行重定向啊?什麼時候需要重定向呢?

        想跳就跳,就跳的漂亮。還是借鑑百度百科:

1)網站調整(如改變網頁目錄結構);

2)網頁被移到一個新地址;

3)網頁擴展名改變(如應用需要把.php改成.Html或.shtml)。

        這種情況下,如果不做重定向,則用戶收藏夾或搜索引擎數據庫中舊地址只能讓訪問客戶得到一個404頁面錯誤信息,訪問流量白白喪失;再者某些註冊了多個域名的網站,也需要通過重定向讓訪問這些域名的用戶自動跳轉到主站點等。

 

3、那麼,什麼時候進行301或者302跳轉呢?

        當一個網站或者網頁24—48小時內臨時移動到一個新的位置,這時候就要進行302跳轉,打個比方說,我有一套房子,但是最近走親戚去親戚家住了,過兩天我還回來的。而使用301跳轉的場景就是之前的網站因爲某種原因需要移除掉,然後要到新的地址訪問,是永久性的,就比如你的那套房子其實是租的,現在租期到了,你又在另一個地方找到了房子,之前租的房子不住了。

    清晰明確而言:

使用301跳轉的場景:

1)域名到期不想續費(或者發現了更適合網站的域名),想換個域名。

2)在搜索引擎的搜索結果中出現了不帶www的域名,而帶www的域名卻沒有收錄,這個時候可以用301重定向來告訴搜索引擎我們目標的域名是哪一個。

3)空間服務器不穩定,換空間的時候。

 

使用302跳轉的場景:

        --儘量使用301跳轉!

 

4、爲什麼儘量要使用301跳轉?——網址劫持!

        這裏摘錄百度百科上的解釋:

        從網址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 重定向問題也是要被解決的目標之一。從一些搜索結果來看,網址劫持現象有所改善,但是並沒有完全解決。

        我的理解是,從網站A(網站比較爛)上做了一個302跳轉到網站B(搜索排名很靠前),這時候有時搜索引擎會使用網站B的內容,但卻收錄了網站A的地址,這樣在不知不覺間,網站B在爲網站A作貢獻,網站A的排名就靠前了。

      301跳轉對查找引擎是一種對照馴良的跳轉編制,也是查找引擎能夠遭遇的跳轉編制,它告訴查找引擎,這個地址棄用了,永遠轉向一個新地址,可以轉移新域名的權重。而302重定向很容易被搜索引擎誤認爲是利用多個域名指向同一網站,那麼你的網站就會被封掉,罪名是“利用重複的內容來干擾Google搜索結果的網站排名”。

 

 

        自問自答模式先告一段落,這裏分享下我在NodeJs中實現跳轉的場景:

 

        之前做過一個重構的項目,由於各種原因,我們的網站的登錄以及註冊部分需要剝離爲另一個網站,域名和之前的不同,所以,我們需要保證舊的地址也能重定向到地址中去,我們就在舊的系統的node層中作了一個重定向,代碼類似這樣:

 

這裏沒有設置狀態碼,發現默認是302跳轉,然後我們設置了301狀態碼,類似這樣:

 

用fiddle抓包(上面的302調整我就不上圖了),看到效果:

 

以上是使用Express,用nodejs原生的代碼實現類似這樣:

 

        先到這裏了,路漫漫其修遠兮,下班回家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章