HTTP協議重定向

HTTP重定向:服務器沒法處理瀏覽器發送過來的請求(request),服務器告訴瀏覽器跳轉到能夠處理請求的url上。(瀏覽器會自動訪問該URL地址,以致於用戶沒法分辨是否重定向了。) 
重定向的返回碼3XX說明。Location響應首部包含了內容的新地址或是優選地址的URL。php

狀態碼

301:在請求的URL已被移除時使用。響應的Location首部中應該包含資源如今所處的URL。 
302:與301狀態碼相似,可是,客戶端應該使用Location首部給出的URL來零食定位資源,未來的請求仍然使用老的URL。web

官方的比較簡潔的說明:瀏覽器

  • 301 redirect: 301 表明永久性轉移(Permanently Moved)
  • 302 redirect: 302 表明暫時性轉移(Temporarily Moved )

儘可能使用301跳轉!301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址能夠從響應的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另外一個地址B)——這是它們的共同點。他們的不一樣在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換爲重定向以後的網址;302表示舊地址A的資源還在(仍然能夠訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。服務器

 

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

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

轉發過程:客戶瀏覽器發送http請求——》web服務器接受此請求——》調用內部的一個方法在容器內部完成請求處理和轉發動做——》將目標資源發送給客戶;搜索引擎

在這裏,轉發的路徑必須是同一個web容器下的url,其不能轉向到其餘的web路徑上去,中間傳遞的是本身的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感受不到服務器作了轉發的。轉發行爲是瀏覽器只作了一次訪問請求。url

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

在這裏location能夠重定向到任意URL,既然是瀏覽器從新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶能夠觀察到地址的變化的。重定向行爲是瀏覽器作了至少兩次的訪問請求的。code

重定向,實際上是兩次requestblog

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

 

PHP舉例說明

第一步:新建一個header.php頁

header('Location:http://www.baidu.com');       //默認是302重定向 

指定用301重定向:

//header('Location:http://www.baidu.com');//默認是302重定向 
header('Location:http://www.baidu.com',true,301);  

相關文章
相關標籤/搜索