HTTP 的重定向
一直好奇,當我們request一個URL時候,它是怎麼在後臺就轉向了。
瀏覽器是接收到什麼指令了才會被重定向?在Headers中?在文件中被JS指令碼重定向?還是什麼?
也就是說,命令客戶端的瀏覽器對一個URL重定向的方法有:
- (*) 通過
Status Code
+Headers: Location
來命令瀏覽器重定向至Location
的網址 - HTML的頭部的
<meta>
標籤中設定重定向。但是隻適用於HTML,類似圖片等其它資源就不行了 - Javascript指令碼中寫
window.location="..."
重定向。同樣只適用於能載入JS的客戶端,不適合其它資源。
通過Status Code狀態碼重定向
這種方法是最標準、適應度最廣泛的:也就是無需HMTL,無需瀏覽器,無需BODY,只要Headers即可要求接收者重定向。
原理圖:
要求重定向的狀態碼有:
- 永久重定向
- 301
- 308
- 臨時重定向
- 302
- 303
- 307
- 特殊重定向
- 300
- 304
Python獲取每次重定向的地址
一般來說,我們用requests
的方法,
r = requests.get(uri, allow_redirects=True)
print( r.url )
for jump in r.history:
print( jump.url )
但是最近在使用一些WebAPI時候,如Oauth2.0的時候,只有登入後才會重定向。
所以如果程式中沒有做到登入,後臺就不會重定向。也就是說,request的時候我們要加入cookies登入資訊,而且是對應著最開始response中的set cookies
設定的cookies才能被重定向。
相關文章
- 使用htaccess Https到http重定向HTTP
- 什麼是HTTP 307臨時重定向?HTTP
- Nginx怎樣將HTTP重定向到HTTPSNginxHTTP
- okhttp 原始碼解析 – http 協議的實現 – 重定向HTTP原始碼協議
- 真正“搞”懂HTTP協議08之重定向HTTP協議
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- Go排坑:http.ServeMux意外重定向的問題分析GoHTTPUX
- nginx開啟ssl並把http重定向到httpsNginxHTTP
- 使用 http-proxy 實現 SAP UI5 請求的代理重定向HTTPUI
- 安裝SSL證書的網站如何實現HTTP重定向到HTTPS網站HTTP
- wordpress 重定向、清理媒體庫、上傳出現http errorHTTPError
- 各種HTTP 3xx重定向狀態碼介紹HTTP
- 重定向
- 重定向Redirect 的知識
- Win2008 r2 iis7/iis7.5系統下HTTP重定向HTTP
- javaweb重定向JavaWeb
- nginx 重定向Nginx
- 域名重定向
- Linux重定向Linux
- Response重定向
- nginx下thinkphp的URL重定向NginxPHP
- Laravel 重定向的幾種方法Laravel
- 關於重定向
- Linux的管道機制和重定向Linux
- Linux中重定向應注意的事情Linux
- 轉發和重定向的區別?
- Javaweb的轉發與重定向的區別以及解決重定向不能共享資料的問題JavaWeb
- HTTP、HTTP1.1、HTTP/2的區別HTTP
- [轉]重定向輸出
- 輸出重定向 管道
- .htaccess 301重定向
- Fiddler(6)AutoResponder,重定向
- Linux 資料重定向Linux
- python 輸出重定向Python
- bp 開放重定向
- 使用檔案重定向
- 轉發和重定向
- SpringMVC重定向傳引數的實現SpringMVC