場景復(fù)現(xiàn)
可以看到我們postman發(fā)出的確實是post請求,message卻報錯這個接口不支持get請求,說明服務(wù)器實際上收到的是一個get請求。
產(chǎn)生原因分析
如果我們訪問的是線上的接口,線上的nginx一般都會對http訪問做一個302重定向,跳轉(zhuǎn)為https訪問。
如果我們正常訪問一個頁面,它會把http跳轉(zhuǎn)為https,之后由https訪問的接口就都是https的了。但如果我們用postman直接訪問接口,nginx會響應(yīng)一個302狀態(tài)碼,并且把重定向的地址存放在響應(yīng)頭Location中。我們的客戶端(一般為瀏覽器,此處為postman)收到302狀態(tài)碼后就會去找Location這個響應(yīng)頭,完成跳轉(zhuǎn)操作。
產(chǎn)生原因驗證
通過跳板機查看了測試環(huán)境nginx的配置:
location / {
rewrite ^(.*) https://$server_name$1 permanent;
}
1
2
3
rewrite模塊最后的flag是permanent,是301重定向,并不是我們推測的302。不過301處理請求的方式是與302相同的,會把post請求轉(zhuǎn)為get請求。
解決方法
如果我們不指定前綴,則默認(rèn)是http://,因此解決方法是在我們的請求url最前面加上https:// 即可文章來源:http://www.zghlxwxcb.cn/news/detail-484486.html
知識拓展
大部分瀏覽器會將301、302的post轉(zhuǎn)為get
303的規(guī)范強制規(guī)定將post請求轉(zhuǎn)為get請求
307規(guī)范要求繼續(xù)向Location地址中post內(nèi)容
308同樣禁止瀏覽器將post請求轉(zhuǎn)為get請求
301與308對應(yīng),302與307對應(yīng),307、308分別是前者的禁止轉(zhuǎn)get版本。
也就是說nginx如果使用的是307、308跳轉(zhuǎn),也就不會出現(xiàn)這樣的問題了。當(dāng)然如果我們沒有相應(yīng)的業(yè)務(wù)場景,沒有必要為了解決postman的問題而使用307、308狀態(tài)碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-484486.html
到了這里,關(guān)于使用postman發(fā)送post請求,卻報錯不支持get請求的原因的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!