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才能被重定向。
相關文章
- Laravel HTTP—— 重定向的使用與原始碼分析LaravelHTTP原始碼
- 使用htaccess Https到http重定向HTTP
- okhttp 原始碼解析 – http 協議的實現 – 重定向HTTP原始碼協議
- okhttp 原始碼解析 - http 協議的實現 - 重定向HTTP原始碼協議
- HTTP中的重定向和請求轉發的區別HTTP
- Nginx怎樣將HTTP重定向到HTTPSNginxHTTP
- 真正“搞”懂HTTP協議08之重定向HTTP協議
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- Go排坑:http.ServeMux意外重定向的問題分析GoHTTPUX
- 什麼是HTTP 307臨時重定向?HTTP
- nginx開啟ssl並把http重定向到httpsNginxHTTP
- wordpress 重定向、清理媒體庫、上傳出現http errorHTTPError
- 各種HTTP 3xx重定向狀態碼介紹HTTP
- 使用 http-proxy 實現 SAP UI5 請求的代理重定向HTTPUI
- 安裝SSL證書的網站如何實現HTTP重定向到HTTPS網站HTTP
- HTTP的重定向301,302,303,307(轉)HTTP
- 單點登入與許可權管理本質:HTTP重定向HTTP
- SpringBoot使用教程【2】支援Https以及Http重定向HttpsSpring BootHTTP
- Shell 重定向(一):檔案重定向
- 重定向Redirect 的知識
- nginx 重定向Nginx
- javaweb重定向JavaWeb
- Response重定向
- CI重定向:php(codeigniter)中如何重定向PHP
- Shell的命令的結果重定向
- Laravel 重定向的幾種方法Laravel
- nginx下thinkphp的URL重定向NginxPHP
- php重定向的三種方法PHP
- HTML中重定向的寫法HTML
- Linux重定向Linux
- 轉發和重定向的區別?
- 轉發與重定向的區別
- Javaweb的轉發與重定向的區別以及解決重定向不能共享資料的問題JavaWeb
- Win2008 r2 iis7/iis7.5系統下HTTP重定向HTTP
- linux shell重定向Linux
- 資料流重定向
- 使用檔案重定向
- 轉發和重定向