HTTP請求返回狀態碼中301與302的狀態碼區別

2021-07-05 09:08:46 字數 2208 閱讀 8792

一.官方說法

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請求返回304狀態碼

標準解釋是 not modified 客戶端有緩衝的文件並發出了乙個條件性的請求 一般是提供if modified since頭表示客戶只想比指定日期更新的文件 伺服器告訴客戶,原來緩衝的文件還可以繼續使用。如下圖 在請求頭里有 if modified since mon,17 aug 2015 0...

HTTP返回狀態碼

只列出了部分常見的 1xx 指示資訊 表示請求已接收,需要繼續處理 100 continue 客戶端應當繼續傳送請求。2xx 成功 表示請求已倍成功接收 理解 接收 200 ok 請求已成功。3xx 重定向 表示需要客戶端採取進一步的操作才能完成請求 300 multiple choices 可選重...

http狀態碼301和302

官方的比較簡潔的說明 301 redirect 301 代表永久性轉移 permanently moved 302 redirect 302 代表暫時性轉移 temporarily moved ps 這裡也順帶記住了兩個比較相近的英語單詞 permanently temporarily 詳細來說,3...