1. 程式人生 > >總結:直接請求轉發(Forward)和間接請求轉發(Redirect)的區別

總結:直接請求轉發(Forward)和間接請求轉發(Redirect)的區別

使用者向伺服器傳送了一次HTTP請求,該請求可能會經過多個資訊資源處理以後才返回給使用者,各個資訊資源使用請求轉發機制相互轉發請求,但是使用者是感覺不到請求轉發的。根據轉發方式的不同,可以區分為直接請求轉發(Forward)和間接請求轉發(Redirect),那麼這兩種轉發方式有何區別呢?


一、從定義上看:

forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器。瀏覽器根本不知道伺服器傳送的內容從哪裡來的,所以它的位址列還是原來的地址。

 redirect是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址。所以位址列顯示的是新的URL。所以redirect等於客戶端向伺服器端發出兩次request,同時也接受兩次response。

二、 從原理上看:

Forward(直接轉發方式)用的更多一些,一般說的請求轉發指的就是直接轉發方式。Web應用程式大多會有一個控制器。由控制器來控制請求應該轉發給那個資訊資源。然後由這些資訊資源處理請求,處理完以後還可能轉發給另外的資訊資源來返回給使用者,這個過程就是經典的MVC模式。

Redirect(間接轉發方式),有時也叫重定向,它一般用於避免使用者的非正常訪問。例如:使用者在沒有登入的情況下訪問後臺資源,Servlet可以將該HTTP請求重定向到登入頁面,讓使用者登入以後再訪問。

、從工作流程上看:

forword過程:客戶瀏覽器傳送http請求--->web伺服器接受此請求--->呼叫內部的一個方法在容器內部完成請求處理和轉發動作--->將目標資源 傳送給客戶。

 redirect過程:客戶瀏覽器傳送http請求--->web伺服器接受後傳送302狀態碼響應及對應新的location給客戶瀏覽器--->客戶瀏覽器發現 是302響應,則自動再發送一個新的http請求,請求url是新的location地址--->伺服器根據此請求尋找資源併發送給客戶。

四、從運用的地方上看

forword 一般用於使用者登入的時候,根據角色轉發到相應的模組;

 redirect一般用於使用者登出登入時返回主頁面或者跳轉到其他網站。

五、從效率上看:

forword效率高,而redirect效率低。

以上就是我對Forward和Redirect的區別的總結介紹,歡迎大家一起交流補充!