http協議:四 (4)http的重定向和跳轉


主動跳轉:跳轉動作是由瀏覽器的使用者主動發起的;
被動跳轉:跳轉動作是由服務器發起的,瀏覽器使用者無法控制。

1、重定向狀態碼

301:俗稱“永久重定向”,原URI已經“永久”性地不存在了,今后的所有請求都必須改用新的URI.
302: 俗稱“臨時重定向”,原URI處於“臨時維護”狀態,新的URI是起“頂包”作用的臨時工。
303 See Other: 類似302,但要求重定向后的請求改為GET方法,訪問一個結果頁面,避免POST/PUT重復操作;
307 Temporary Redirect: 類似302,但重定向后請求里的方法和實體不允許變動,含義比302更明確;
308 Permanent Redirect: 類似307,不允許重定向后的請求變動,但它是301“永久重定向”的含義

2、重定向的應用場景
一個最常見的原因就是“資源不可用”,需要用另一個新的URI來代替。
不可用的原因:如域名變更、服務器變更、網站改版、系統維護。
另一個原因就是“避免重復”,讓多個網址都跳轉到一個URI,增加訪問入口的同時還不會增加額外的工作量。如:有的網站會申請多個名稱類似的域名,然后把它們重定向到主站上。

3、重定向的相關問題
第一個問題是“性能損耗”。重定向的機制決定了一個跳轉會有兩次請求-應答,比正常的訪問多了一次。
第二個問題是“循環跳轉”。如果重定向的策略設置欠考慮,可能會出現“A=>B=>C=>A”的無限循環。

 

1、重定向是服務器發起的跳轉,要求客戶端改用新的 URI 重新發送請求,通常會自動進行,用戶是無感知的;

2、301/302 是最常用的重定向狀態碼,分別是“永久重定向”和“臨時重定向”;301用於廢棄原地址跳轉新地址,302用於暫時無法訪問原地址跳轉新地址,兩者都需要瀏覽器重新發起一次請求

3、響應頭字段 Location 指示了要跳轉的 URI,可以用絕對或相對的形式;

4、重定向可以把一個 URI 指向另一個 URI,也可以把多個 URI 指向同一個 URI,用途很多;

5、使用重定向時需要當心性能損耗,還要避免出現循環跳轉。

 

補充

01 網頁的“入鏈接”和“出鏈接”也是標記網頁重要性的關鍵指標,最著名的就是Google發明的PageRank。

02“300 Multiple Choices"也是一個特殊的重定向狀態碼,它會返回一個有多個鏈接選項的頁面,由用戶自行選擇要跳轉的鏈接,用的較少。

03重定向報文 里還可以用Refresh字段,實現延時重定向,例如“Refresh: 5; url=xxx”告訴瀏覽器5秒鍾后再跳轉。

04與跳轉有關的還有一個“Referer”和“Referrer- Policy”(注意前者是個拼寫錯誤,但已經“將錯就錯”),表示瀏覽器跳轉的來源(即弓|用地址),可用於統計分析和防盜鏈。

05 301/302 重定向是由瀏覽器執行的,對於服務器來說可以稱為“外部重定向”相應的也就有服務器的“內部重定向”,直接在服務器內部跳轉URI,因為不會發出HTTP 請求,所以沒有額外的性能損失。


外部重定向,服務器會把重定向的地址給瀏覽器,然后瀏覽器再次的發起請求,地址欄的地址變化了。
內部重定向,服務器會直接把重定向的資源返給瀏覽器,不需要再次在瀏覽器發起請求,地址欄的地址不變。
重定向我的經驗,主要用在未登錄或者權限不足的場景,跳轉到對應的登錄或提升頁面之中

301,302, 303重定向不要求前后協議一致,http可以調轉https

重定向可以應用於實現負載均衡,但多了一次請求的成本,比較重

302不改變原uri,所以每次都會找原uri,成本較高,應當盡量少用


免責聲明!

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



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