場景:終端使用post方法訪問/qacenter/v1/test-records介面時,需要重定向跳轉到/qacenterinner/v1/test-records介面
實現:
tornado**
# 增
async
defpost
(self)
:return self.redirect(
"/qacenterinner/v1/test-reports"
, status=
307)
使用postman訪問介面,報錯405 method not allowed, 檢視tornado列印如下:
[i 200506 09:34:54 web:2246] 302 post /qacenter/v1/test-records (192.168.63.56) 0.71ms
[w 200506 09:34:54 web:2246] 405 get /qacenterinner/v1/test-records (192.168.63.56) 0.49ms
問題描述:
使用tornado 重定向後,發現postman的請求方法發生了變化,從post變成了get
tornado 重定向使用方法:
postman傳送請求時,有以下設定,嘗試開啟follow original http method,這樣重定向後的請求方法就不會發生變化了。
更改後,發現,第二次的請求方法確實變成了post,但是很遺憾的時,請求body為空。
這當然時不符合我們的預期的!那到底是什麼原因導致的呢?以及如何解決呢?
實際上,tornado的redirect方法預設返回的是302狀態碼,而在標準http 1.1協議中,有以下約定
所以,不論是瀏覽器、postman還是python 中的requests,都會在302重定向之後請求方法變成了get。
修改服務端響應碼為307或308即可,在tornado中指定響應status,修改如下:
async
defpost
(self)
:return self.redirect(
"/qacenterinner/v1/test-records"
, status=
307)
修改後,驗證問題解決。
[i 200506 09:44:23 web:2246] 307 post /qacenter/v1/test-records (192.168.63.56) 0.65ms
[i 200506 09:44:23 web:2246] 201 post /qacenterinner/v1/test-records (192.168.63.56) 62.78ms
參考資料:
how can tornado set_status 307
mdn web docs: http 的重定向
tornado重定向的幾種方式
tornado第一種重定向方式,使用redirect方法 import tornado.web import tornado.ioloop class redirecthandlertest tornado.web.requesthandler def get self,args,kwargs 第一...
重定向 C語言實現重定向
本題是c primer plus 5版 第8章程式設計題第一道題,題目如下 從題述來看,有如下幾個關鍵點 有這麼乙個文字檔案 讀入檔案中的文字 統計檔案中字元數 判斷檔案的結尾 以上4點都做到了,此題解完。那麼,這4步的每一步該如何解決呢?1.有這麼乙個文字檔案 這個好解決,事先建立好乙個文字檔案,...
node 重定向 express 重定向
服務端重定向對非同步請求無效 如何通過伺服器讓客戶端重定向 1.狀態碼設定為302 臨時重定向,301永久重定向 瀏覽器會記住 當再次請求相同位址的時候,瀏覽器不會重新請求該位址,會直接跳轉上一次請求該位址時的重定向位址 res.statuscode 2.在響應頭中通過 location 告訴客戶端...