(轉)重定向和轉發區別

轉自:http://www.javashuo.com/article/p-bstqiytf-na.htmlhtml

HTTP中的重定向和請求轉發的區別

1、調用方式 


咱們知道,在servlet中調用轉發、重定向的語句以下:
request.getRequestDispatcher("new.jsp").forward(request, response);//轉發到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp

在jsp頁面中你也會看到經過下面的方式實現轉發:
<jsp:forward page="apage.jsp" />

固然也能夠在jsp頁面中實現重定向:
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>web


2、本質區別

解釋一  


一句話,轉發是服務器行爲,重定向是客戶端行爲。爲何這樣說呢,這就要看兩個動做的工做流程:瀏覽器

轉發過程:客戶瀏覽器發送http請求----》web服務器接受此請求--》調用內部的一個方法在容器內部完成請求處理和轉發動做----》將目標資源發送給客戶;在這裏,轉發的路徑必須是同一個web容器下的url,其不能轉向到其餘的web路徑上去,中間傳遞的是本身的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感受不到服務器作了轉發的。轉發行爲是瀏覽器只作了一次訪問請求。服務器

重定向過程:客戶瀏覽器發送http請求----》web服務器接受後發送302狀態碼響應及對應新的location給客戶瀏覽器--》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址----》服務器根據此請求尋找資源併發送給客戶。在這裏location能夠重定向到任意URL,既然是瀏覽器從新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶能夠觀察到地址的變化的。重定向行爲是瀏覽器作了至少兩次的訪問請求的。併發

解釋二

重定向,實際上是兩次request, 
第一次,客戶端request   A,服務器響應,並response回來,告訴瀏覽器,你應該去B。這個時候IE能夠看到地址變了,並且歷史的回退按鈕也亮了。重定向能夠訪問本身web應用之外的資源。在重定向的過程當中,傳輸的信息會被丟失。

例子:jsp


請求轉發是服務器內部把對一個request/response的處理權,移交給另一個 
對於客戶端而言,它只知道本身最先請求的那個A,而不知道中間的B,甚至C、D。
 傳輸的信息不會丟失。post

 例子: url

解釋三

 

假設你去辦理某個執照, 

重定向:你先去了A局,A局的人說:「這個事情不歸咱們管,去B局」,而後,你就從A退了出來,本身乘車去了B局。 

轉發:你先去了A局,A局看了之後,知道這個事情其實應該B局來管,可是他沒有把你退回來,而是讓你坐一下子,本身到後面辦公室聯繫了B的人,讓他們辦好後,送了過來。
spa

相關文章
相關標籤/搜索