轉(zhuǎn)載地址
官方的比較簡(jiǎn)潔的說明:
301 redirect: 301 代表永久性轉(zhuǎn)移(Permanently Moved)
302 redirect: 302 代表暫時(shí)性轉(zhuǎn)移(Temporarily Moved )
ps:這里也順帶記住了兩個(gè)比較相近的英語(yǔ)單詞(permanently继准、temporarily)溪掀,嘻哈约啊!
詳細(xì)來說,301和302狀態(tài)碼都表示重定向链峭,就是說瀏覽器在拿到服務(wù)器返回的這個(gè)狀態(tài)碼后會(huì)自動(dòng)跳轉(zhuǎn)到一個(gè)新的URL地址,這個(gè)地址可以從響應(yīng)的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另一個(gè)地址B)——這是它們的共同點(diǎn)熄守。他們的不同在于。301表示舊地址A的資源已經(jīng)被永久地移除了(這個(gè)資源不可訪問了)耗跛,**[搜索引擎](http://lib.csdn.net/base/searchengine)在抓取新內(nèi)容的同時(shí)也將舊的網(wǎng)址交換為重定向之后的網(wǎng)址**裕照;302表示舊地址A的資源還在(仍然可以訪問),這個(gè)重定向只是臨時(shí)地從舊地址A跳轉(zhuǎn)到地址B调塌,**搜索引擎會(huì)抓取新的內(nèi)容而保存舊的網(wǎng)址牍氛。**
這里開啟傻瓜自問自答模式(自己可能想到的疑問):
1、什么是重定向把滩搬俊?
就是地址A跳轉(zhuǎn)到地址B啦紊扬。百度百科的解釋:重定向(Redirect)就是通過各種方法將各種網(wǎng)絡(luò)請(qǐng)求重新定個(gè)方向轉(zhuǎn)到其它位置(如:網(wǎng)頁(yè)重定向、域名的重定向唉擂、路由選擇的變化也是對(duì)數(shù)據(jù)報(bào)文經(jīng)由路徑的一種重定向)餐屎。
2、可是玩祟,為什么要進(jìn)行重定向案顾酢?什么時(shí)候需要重定向呢空扎?
想跳就跳藏鹊,就跳的漂亮。還是借鑒百度百科:
1)網(wǎng)站調(diào)整(如改變網(wǎng)頁(yè)目錄結(jié)構(gòu))转锈;
2)網(wǎng)頁(yè)被移到一個(gè)新地址盘寡;
3)網(wǎng)頁(yè)擴(kuò)展名改變(如應(yīng)用需要把.php改成.Html或.shtml)。
這種情況下撮慨,如果不做重定向竿痰,則用戶收藏夾或搜索引擎數(shù)據(jù)庫(kù)中舊地址只能讓訪問客戶得到一個(gè)404頁(yè)面錯(cuò)誤信息,訪問流量白白喪失砌溺;再者某些注冊(cè)了多個(gè)域名的網(wǎng)站影涉,也需要通過重定向讓訪問這些域名的用戶自動(dòng)跳轉(zhuǎn)到主站點(diǎn)等。
3规伐、那么蟹倾,什么時(shí)候進(jìn)行301或者302跳轉(zhuǎn)呢?
當(dāng)一個(gè)網(wǎng)站或者網(wǎng)頁(yè)24—48小時(shí)內(nèi)臨時(shí)移動(dòng)到一個(gè)新的位置猖闪,這時(shí)候就要進(jìn)行302跳轉(zhuǎn)鲜棠,打個(gè)比方說,我有一套房子萧朝,但是最近走親戚去親戚家住了岔留,過兩天我還回來的。而使用301跳轉(zhuǎn)的場(chǎng)景就是之前的網(wǎng)站因?yàn)槟撤N原因需要移除掉检柬,然后要到新的地址訪問献联,是永久性的,就比如你的那套房子其實(shí)是租的何址,現(xiàn)在租期到了里逆,你又在另一個(gè)地方找到了房子,之前租的房子不住了用爪。
清晰明確而言:
使用301跳轉(zhuǎn)的場(chǎng)景:
1)域名到期不想續(xù)費(fèi)(或者發(fā)現(xiàn)了更適合網(wǎng)站的域名)原押,想換個(gè)域名。
2)在搜索引擎的搜索結(jié)果中出現(xiàn)了不帶www的域名偎血,而帶www的域名卻沒有收錄诸衔,這個(gè)時(shí)候可以用301重定向來告訴搜索引擎我們目標(biāo)的域名是哪一個(gè)盯漂。
3)空間服務(wù)器不穩(wěn)定,換空間的時(shí)候笨农。
使用302跳轉(zhuǎn)的場(chǎng)景:
--盡量使用301跳轉(zhuǎn)就缆!
4、為什么盡量要使用301跳轉(zhuǎn)谒亦?——網(wǎng)址劫持竭宰!
這里摘錄百度百科上的解釋:
從網(wǎng)址A 做一個(gè)302 重定向到網(wǎng)址B 時(shí),主機(jī)服務(wù)器的隱含意思是網(wǎng)址A 隨時(shí)有可能改主意份招,重新顯示本身的內(nèi)容或轉(zhuǎn)向其他的地方切揭。大部分的搜索引擎在大部分情況下,當(dāng)收到302 重定向時(shí)锁摔,一般只要去抓取目標(biāo)網(wǎng)址就可以了廓旬,也就是說網(wǎng)址B。如果搜索引擎在遇到302 轉(zhuǎn)向時(shí)鄙漏,百分之百的都抓取目標(biāo)網(wǎng)址B 的話嗤谚,就不用擔(dān)心網(wǎng)址URL 劫持了棺蛛。問題就在于怔蚌,有的時(shí)候搜索引擎,尤其是Google旁赊,并不能總是抓取目標(biāo)網(wǎng)址桦踊。比如說,有的時(shí)候A 網(wǎng)址很短终畅,但是它做了一個(gè)302 重定向到B 網(wǎng)址籍胯,而B 網(wǎng)址是一個(gè)很長(zhǎng)的亂七八糟的URL 網(wǎng)址,甚至還有可能包含一些問號(hào)之類的參數(shù)离福。很自然的杖狼,A 網(wǎng)址更加用戶友好,而B 網(wǎng)址既難看妖爷,又不用戶友好蝶涩。這時(shí)Google 很有可能會(huì)仍然顯示網(wǎng)址A。由于搜索引擎排名算法只是程序而不是人絮识,在遇到302 重定向的時(shí)候绿聘,并不能像人一樣的去準(zhǔn)確判定哪一個(gè)網(wǎng)址更適當(dāng),這就造成了網(wǎng)址URL 劫持的可能性次舌。也就是說熄攘,一個(gè)不道德的人在他自己的網(wǎng)址A 做一個(gè)302 重定向到你的網(wǎng)址B,出于某種原因彼念, Google 搜索結(jié)果所顯示的仍然是網(wǎng)址A挪圾,但是所用的網(wǎng)頁(yè)內(nèi)容卻是你的網(wǎng)址B 上的內(nèi)容浅萧,這種情況就叫做網(wǎng)址URL 劫持。你辛辛苦苦所寫的內(nèi)容就這樣被別人偷走了哲思。302 重定向所造成的網(wǎng)址URL 劫持現(xiàn)象惯殊,已經(jīng)存在一段時(shí)間了。不過到目前為止也殖,似乎也沒有什么更好的解決方法土思。在正在進(jìn)行的谷歌大爸爸?jǐn)?shù)據(jù)中心轉(zhuǎn)換中,302 重定向問題也是要被解決的目標(biāo)之一忆嗜。從一些搜索結(jié)果來看己儒,網(wǎng)址劫持現(xiàn)象有所改善,但是并沒有完全解決捆毫。
我的理解是闪湾,從網(wǎng)站A(網(wǎng)站比較爛)上做了一個(gè)302跳轉(zhuǎn)到網(wǎng)站B(搜索排名很靠前),這時(shí)候有時(shí)搜索引擎會(huì)使用網(wǎng)站B的內(nèi)容绩卤,但卻收錄了網(wǎng)站A的地址途样,這樣在不知不覺間,網(wǎng)站B在為網(wǎng)站A作貢獻(xiàn)濒憋,網(wǎng)站A的排名就靠前了何暇。
301跳轉(zhuǎn)對(duì)查找引擎是一種對(duì)照馴良的跳轉(zhuǎn)編制,也是查找引擎能夠遭遇的跳轉(zhuǎn)編制凛驮,它告訴查找引擎裆站,這個(gè)地址棄用了,永遠(yuǎn)轉(zhuǎn)向一個(gè)新地址黔夭,可以轉(zhuǎn)移新域名的權(quán)重宏胯。而302重定向很容易被搜索引擎誤認(rèn)為是利用多個(gè)域名指向同一網(wǎng)站,那么你的網(wǎng)站就會(huì)被封掉本姥,罪名是“利用重復(fù)的內(nèi)容來干擾Google搜索結(jié)果的網(wǎng)站排名”肩袍。
自問自答模式先告一段落,這里分享下我在NodeJs中實(shí)現(xiàn)跳轉(zhuǎn)的場(chǎng)景:
之前做過一個(gè)重構(gòu)的項(xiàng)目婚惫,由于各種原因氛赐,我們的網(wǎng)站的登錄以及注冊(cè)部分需要?jiǎng)冸x為另一個(gè)網(wǎng)站,域名和之前的不同辰妙,所以鹰祸,我們需要保證舊的地址也能重定向到地址中去,我們就在舊的系統(tǒng)的node層中作了一個(gè)重定向密浑,代碼類似這樣:
這里沒有設(shè)置狀態(tài)碼蛙婴,發(fā)現(xiàn)默認(rèn)是302跳轉(zhuǎn),然后我們?cè)O(shè)置了301狀態(tài)碼尔破,類似這樣:
用fiddle抓包(上面的302調(diào)整我就不上圖了)街图,看到效果:
以上是使用Express浇衬,用nodejs原生的代碼實(shí)現(xiàn)類似這樣:
先到這里了,路漫漫其修遠(yuǎn)兮餐济,下班回家耘擂。