頁面重定向跳轉


  項目中,可能會碰到這樣的需求,前端發起http請求到服務端進行一些校驗或者登陸操作,然后根據服務端查詢結果,拼接url參數打開一個新頁面。總結了下,有三種實現方式:

  1、經典的ajax請求:通過post方式,發起http請求,服務端響應頁面地址,由客戶端拼接參數,通過window.location方式打開新頁面。也可以由服務端直接把參數拼接好,返回一個完整的url地址由客戶端通過JS跳轉,

 

  2、通過服務端302跳轉,這涉及兩個概念:redirect(重定向)、forward(轉發)

    2.1  重定向:重定向是客戶端行為,

      重定向過程:客戶端發送http請求 ---> web服務器接受后發送302狀態碼響應及對應新的location給客戶瀏覽器 ---> 客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址  ---> 服務器根據此請求尋找資源並發送給客戶,這里為瀏覽器行為

      實現示意圖:

      

    實現思路:服務端302返給客戶端時,會攜帶一個新的location給客戶端,客戶端需要監聽302狀態,通過location打開新頁面

if (data.status == 302) {
    location.href = data.location;
}

 

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

    轉發示意圖:

    

    注意事項:要做服務器轉發,必須得經過a標簽或者location觸發請求,服務器才可以302轉發資源並打開新頁面

 

   2.3、兩個對比列表

類別 概念 共享數據 應用
Redirect URL重新定向:可以是任意的URL 不能共享request里面的數據 一般用於用戶注銷登錄時返回主頁面和跳轉到其它的網站等等
Forward 頁面的轉發:只能是同一個Web應用程序的其他Web組件 轉發頁面和轉發到的頁面可以共性request里面的數據 一般用於用戶登錄的時候根據角色轉發到相應的模塊等等

 

  2.4、有個例子說明兩者的區別很生動:

    假設你去辦理某個執照

    重定向:你先去了A局,A局的人說:“這個事情不歸我們管,去B局”,然后,你就從A退了出來,自己乘車去了B局。

    轉發:你先去了A局,A局看了以后,知道這個事情其實應該B局來管,但是他沒有把你退回來,而是讓你坐一會兒,自己到后面辦公室聯系了B的人,讓他們辦好后,送了過來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM