HTTP返回碼中301與302的區別

2021-06-08 08:27:16 字數 2394 閱讀 2136

一.官方說法

301,302 都是http狀態的編碼,都代表著某個url發生了轉移,不同之處在於: 

301 redirect: 301 代表永久性轉移(permanently moved)。

302 redirect: 302 代表暫時性轉移(temporarily moved )。 

這是很官方的說法,那麼它們的區別到底是什麼呢?

二.現實中的差異

2.1.對於使用者

301,302對使用者來說沒有區別,他們看到效果只是乙個跳轉,瀏覽器中舊的url變成了新的url。頁面跳到了這個新的url指向的地方。

2.2.對於引擎及站長

2.2.1 302

302轉向可能會有url規範化及**劫持的問題。可能被搜尋引擎判為可疑轉向,甚至認為是作弊。

**規範化

請參見:

**劫持

302重定向和**劫持(url hijacking)有什麼關係呢?這要從搜尋引擎如何處理302轉向說起。從定義來說,從**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劫持。你辛辛苦苦所寫的內容就這樣被別人偷走了。

2.2.2 301

當網頁a用301重定向轉到網頁b時,搜尋引擎可以肯定網頁a永久的改變位置,或者說實際上不存在了,搜尋引擎就會把網頁b當作唯一有效目標。

301的好處是:

第一, 沒有**規範化問題。

第二, 也很重要的,網頁a的pr網頁級別會傳到網頁b。

三.apache中實現301、302

方法一,url rewrite,mod_rewrite

rewriteengine on

rewritecond % ^cmp.soso.com [nc]

rewriterule ^/js/(.*) [r=301]

servername cmp.soso.com

將cmp.soso.com中js目錄的下所有訪問重定向到

,指定跳轉返回碼為301。

對於[r=301]

的詳解:

'redirect|r [=code]' (強制重定向 redirect)

以http://thishost[:thisport]/(使新的url成為乙個uri) 為字首的substitution可以強制性執行乙個外部重定向。 如果code沒有指定,則產生乙個http響應**302(臨時性移動)。 如果需要使用在300-400範圍內的其他響應**,只需在此指定這個數值即可, 另外,還可以使用下列符號名稱之一: temp (預設的), permanent, seeother. 用它可以把規範化的url反饋給客戶端,如, 重寫``/~''為 ``/u/'',或對/u/user加上斜槓,等等。

注意: 在使用這個標記時,必須確保該替換欄位是乙個有效的url! 否則,它會指向乙個無效的位置! 並且要記住,此標記本身只是對url加上 http://thishost[:thisport]/的字首,重寫操作仍然會繼續。 通常,你會希望停止重寫操作而立即重定向,則還需要使用'l'標記.

方法二 redirect ,涉及模組:mod_alias例:

documentroot /home/qmhball/web/mybranches/stat_3276/oa/

servername oalogin.com

redirect 301 /login.php

將oalogin.com下對login.php的訪問重定向到

,返回碼301。

如果沒有指定redirect的返回引數(例中的301),則預設重定向是"臨時性的"(http status 302)。

HTTP返回碼中301與302的區別

一 官方說法 301,302 都是http狀態的編碼,都代表著某個url發生了轉移,不同之處在於 301 redirect 301 代表永久性轉移 permanently moved 302 redirect 302 代表暫時性轉移 temporarily moved 這是很官方的說法,那麼它們的區...

HTTP返回碼中301與302的區別

一 官方說法 301,302 都是http狀態的編碼,都代表著某個url發生了轉移,不同之處在於 301 redirect 301 代表永久性轉移 permanently moved 302 redirect 302 代表暫時性轉移 temporarily moved 這是很官方的說法,那麼它們的區...

HTTP返回碼中301與302的區別

一 官方說法 301,302 都是http狀態的編碼,都代表著某個url發生了轉移,不同之處在於 301 redirect 301 代表永久性轉移 permanently moved 302 redirect 302 代表暫時性轉移 temporarily moved 這是很官方的說法,那麼它們的區...