1. 程式人生 > >轉發(forward)與重定向(redirect)

轉發(forward)與重定向(redirect)

中間 esp 不同 轉發 調用 並且 站點 ret 跳轉

轉發(forward)

是服務器請求資源,服務器直接訪問目標資源地址的URL,讀取並發送目標URL返回的內容到瀏覽器,這個過程瀏覽器是不知道,瀏覽器的地址欄還是原來的地址。
轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的也是自己的容器內的request,故轉發頁面和轉發到的頁面可以共享request裏面的數據。

重定向(redirect)

是服務器根據處理邏輯,返回一個302狀態碼和新請求地址,告訴瀏覽器重新去請求這個url,這時瀏覽器的地址欄就會變成新的URL。因為是瀏覽器重新請求目標地址,所以這個新地址可以重定向到容易的URL,並且兩次請求的request是不共享的。

總結

轉發是服務器行為,重定向是客戶端行為。

兩者的內部機制有很大的區別:

  • 請求轉發只能將請求轉發給同一個WEB應用中的組件,而重定向還可以重新定向到同一站點不同應用程序中的資源,甚至可以定向到一絕對的URL。
  • 重定向可以看見目標頁面的URL,轉發只能看見第一次訪問的頁面URL,以後的工作都是有服務器來做的。
  • 請求轉發調用者和被調用者之間共享相同的request對象和response對象,重定向調用者和被調用者屬於兩個獨立訪問請求和響應過程。
  • 重定向跳轉後必須加上return,要不然頁面雖然跳轉了,但是還會執行跳轉後面的語句,轉發是執行了跳轉頁面,下面的代碼就不會在執行了。

參考

轉發(forward)與重定向(redirect)