重定向和轉(zhuǎn)發(fā)到底有啥區(qū)別?看這篇就夠了!
圖片
Hello,大家好!我是小米,一個(gè)喜歡分享技術(shù)的積極活潑的29歲程序員。今天我們要聊一聊“網(wǎng)絡(luò)基礎(chǔ):重定向和轉(zhuǎn)發(fā)區(qū)別”。相信大家在開(kāi)發(fā)中經(jīng)常會(huì)遇到這兩種操作,但它們的具體區(qū)別和應(yīng)用場(chǎng)景你們都清楚嗎?接下來(lái),小米將帶你們一探究竟!
什么是重定向?
重定向(Redirect)是指服務(wù)器收到請(qǐng)求后,告訴瀏覽器去訪(fǎng)問(wèn)另一個(gè)URL,類(lèi)似于告訴用戶(hù)“你走錯(cuò)路了,正確的地方在那邊”。重定向分為臨時(shí)重定向和永久重定向。
臨時(shí)重定向(302)
臨時(shí)重定向表示資源只是暫時(shí)位置變了,將來(lái)還可能會(huì)回到原位置。這種情況下,瀏覽器會(huì)用新地址來(lái)再次發(fā)送請(qǐng)求,但會(huì)保留最初的請(qǐng)求方法,比如POST請(qǐng)求。
圖片
永久重定向(301)
永久重定向表示資源已經(jīng)永久搬遷到新位置,瀏覽器和搜索引擎都會(huì)將新地址作為資源的永久地址,并且瀏覽器會(huì)用GET方法重新請(qǐng)求新地址。
圖片
什么是轉(zhuǎn)發(fā)?
轉(zhuǎn)發(fā)(Forward)是服務(wù)器內(nèi)部的一種操作,客戶(hù)端并不知道轉(zhuǎn)發(fā)的發(fā)生。服務(wù)器收到請(qǐng)求后,內(nèi)部調(diào)用另一個(gè)資源來(lái)處理請(qǐng)求,瀏覽器的URL不會(huì)發(fā)生變化。
圖片
重定向和轉(zhuǎn)發(fā)的區(qū)別
客戶(hù)端和服務(wù)器端的處理不同
- 重定向:服務(wù)器告訴客戶(hù)端一個(gè)新的URL,客戶(hù)端再發(fā)送新的請(qǐng)求。
- 轉(zhuǎn)發(fā):服務(wù)器內(nèi)部直接調(diào)用資源處理請(qǐng)求,客戶(hù)端并不知道發(fā)生了轉(zhuǎn)發(fā)。
URL的變化
- 重定向:瀏覽器的URL會(huì)變成新地址。
- 轉(zhuǎn)發(fā):瀏覽器的URL不會(huì)改變,仍然顯示的是最初的地址。
請(qǐng)求次數(shù)
- 重定向:會(huì)產(chǎn)生兩次請(qǐng)求,第一次請(qǐng)求服務(wù)器,服務(wù)器返回新的URL,瀏覽器再次請(qǐng)求新URL。
- 轉(zhuǎn)發(fā):只有一次請(qǐng)求,服務(wù)器內(nèi)部直接處理。
數(shù)據(jù)傳遞
- 重定向:由于是兩次請(qǐng)求,無(wú)法在請(qǐng)求間傳遞數(shù)據(jù)(除非使用Session或其他持久化手段)。
- 轉(zhuǎn)發(fā):可以在轉(zhuǎn)發(fā)過(guò)程中共享Request對(duì)象中的數(shù)據(jù)。
應(yīng)用場(chǎng)景
重定向的應(yīng)用場(chǎng)景
- 用戶(hù)登錄后跳轉(zhuǎn):用戶(hù)登錄成功后,重定向到主頁(yè),確保用戶(hù)刷新頁(yè)面不會(huì)重復(fù)提交表單。
- 資源永久遷移:網(wǎng)站改版后,舊URL重定向到新URL,告訴搜索引擎新的地址。
- 防止重復(fù)提交表單:處理表單提交時(shí),重定向到一個(gè)結(jié)果頁(yè)面,避免用戶(hù)刷新導(dǎo)致表單重復(fù)提交。
轉(zhuǎn)發(fā)的應(yīng)用場(chǎng)景
- 服務(wù)器內(nèi)部邏輯處理:在一個(gè)請(qǐng)求中,需要調(diào)用多個(gè)不同的資源來(lái)完成,比如根據(jù)用戶(hù)權(quán)限選擇顯示不同頁(yè)面。
- 共享數(shù)據(jù):在轉(zhuǎn)發(fā)過(guò)程中,可以共享Request對(duì)象中的數(shù)據(jù),比如在登錄驗(yàn)證后,轉(zhuǎn)發(fā)到不同的頁(yè)面展示用戶(hù)信息。
- MVC模式:在Spring MVC等框架中,Controller處理完請(qǐng)求后,將請(qǐng)求轉(zhuǎn)發(fā)到視圖層進(jìn)行展示。
實(shí)例演示
為了讓大家更好地理解重定向和轉(zhuǎn)發(fā)的區(qū)別,我們來(lái)看一個(gè)實(shí)際的例子。假設(shè)我們有一個(gè)簡(jiǎn)單的登錄系統(tǒng)。
重定向示例
用戶(hù)登錄成功后,重定向到主頁(yè):
圖片
轉(zhuǎn)發(fā)示例
用戶(hù)登錄成功后,轉(zhuǎn)發(fā)到主頁(yè):
圖片
END
在今天的分享中,我們?cè)敿?xì)了解了重定向和轉(zhuǎn)發(fā)的概念、區(qū)別以及它們的應(yīng)用場(chǎng)景。