HTTP中302與301的區別以及在ASP.NET中如何實現
一.官方說法 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。
使用 ASP.NET 又喜歡跟進新技術的朋友可能已經知道,在 ASP.NET 4.0 中增加了 Response.RedirectPermanent() 方法來實現永久重定向(301),方法的作用在註釋中解釋的很清楚:執行從所請求 URL 到所指定 URL 的永久重定向,並提供用於完成響應的選項。
在 ASP.NET MVC 3 專案中,我們可以根據需要來使用以下寫法實現永久重定向:
public ActionResult Index()
{
return RedirectPermanent("Contact"); return RedirectToActionPermanent("Contact"); return RedirectToRoutePermanent("Contact");
}
過去我們可以通過設定伺服器返回的 HTTP 資料流中的狀態碼,如指定狀態碼為301代表永久重定向,現在在 ASP.NET 4.0 中 ASP.NET Web Forms專案和 ASP.NET MVC 專案中我們都可以非常簡單的實現 URL 永久重定向。