前端的小伙伴們大家好,相信很多小伙伴們面試的時候都被問過httpcode 301和302的區別。好多小伙伴們不加思索就答:301是永久重定向,302是臨時重定向。然后你要是這么回答,面試官就會在心里默默地扣掉1分。繼續問你:還有其他區別嗎?下面小編就為大家詳細的說一下這兩者的區別。
1. 定義
301:被請求的資源已永久移動到新位置,并且將來任何對此資源的引用都應該使用本響應返回的若干個 URI 之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。
302:請求的資源現在臨時從不同的 URI 響應請求。由于這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以后的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可緩存的。
兩者都是一個POST請求經過 301/302 后會被瀏覽器轉為GET請求
2. 緩存
定義上已經給出,對于301請求,瀏覽器是默認給一個很長的緩存。而302是不緩存的。
3. 搜索引擎
301:?舊地址A的資源不可訪問了(永久移除), 重定向到網址B,搜索引擎會抓取網址B的內容,同時將網址保存為B網址。
302:?舊地址A的資源仍可訪問,這個重定向只是臨時從舊地址A跳轉到B地址,這時搜索引擎會抓取B網址內容,但是會將網址保存為A的。
4. 安全
盡量使用301跳轉,以防止網址劫持!
假如,A -> B。大部分的搜索引擎在大部分情況下,當收到302 重定向時,有的時候搜索引擎,尤其是Google,并不能總是抓取目標網址。比如說,有的時候A 網址很短,但是它做了一個302 重定向到B 網址,而B 網址是一個很長的亂七八糟的URL 網址,甚至還有可能包含一些問號之類的參數。很自然的,A 網址更加用戶友好,而B 網址既難看,又不用戶友好。這時Google 很有可能會仍然顯示網址A。由于搜索引擎排名算法只是程序而不是人,在遇到302 重定向的時候,并不能像人一樣的去準確判定哪一個網址更適當,這就造成了網址URL?劫持的可能性。也就是說,一個不道德的人在他自己的網址A 做一個302 重定向到你的網址B,出于某種原因, Google 搜索結果所顯示的仍然是網址A,但是所用的網頁內容卻是你的網址B 上的內容,這種情況就叫做網址URL 劫持。你辛辛苦苦所寫的內容就這樣被別人偷走了。302 重定向所造成的網址URL 劫持現象,已經存在一段時間了。不過到目前為止,似乎也沒有什么更好的解決方法。在正在進行的谷歌大爸爸數據中心轉換中,302 重定向問題也是要被解決的目標之一。從一些搜索結果來看,網址劫持現象有所改善,但是并沒有完全解決。
簡單來說就是:有個壞人把他的電話來電轉移到了一個明星那,讓大家都以為他的電話是那個明星的。他的手機號成名后,就可以拉個微信群,大膽的假裝明星,實現他的微商夢,從此走上人生巔峰。