http請(qǐng)求時(shí)Form Data & Request Payload的區(qū)別

在與后端的調(diào)試中發(fā)現(xiàn)一個(gè)問(wèn)題,使用post發(fā)請(qǐng)求時(shí),發(fā)送的params后端一直說(shuō)沒(méi)收到參數(shù),F(xiàn)12發(fā)現(xiàn)參數(shù)確確實(shí)實(shí)已經(jīng)發(fā)送了。如圖:


2456523150-60531bd471dbe_fix732.png

使用swagger發(fā)送同樣的參數(shù)請(qǐng)求卻可以接收到:


3526521755-60531be7aa60b_fix732.png

通過(guò)比對(duì)發(fā)現(xiàn),兩者的不同在于一個(gè)參數(shù)類型是Form Data,一個(gè)是Request Payload。什么意思呢?

百度一下 你就知道

Request Payload更準(zhǔn)確的說(shuō)是http request的payload body。一般用在數(shù)據(jù)通過(guò)POST請(qǐng)求或者PUT請(qǐng)求。它是HTTP請(qǐng)求中空行的后面那部分。(PS:這里涉及一個(gè)http常被問(wèn)到的問(wèn)題,http請(qǐng)求由哪幾部分組成,一般是請(qǐng)求行,請(qǐng)求頭,空行,請(qǐng)求體。payload body應(yīng)該是對(duì)應(yīng)請(qǐng)求體。)

一個(gè)請(qǐng)求伴隨著header設(shè)置為Content-Type: application/json時(shí),參數(shù)看起來(lái)是這樣的:

POST /some-path HTTP/1.1 Content-Type: application/json { "foo" : "bar", "name" : "John" }

如果你只是正常的請(qǐng)求一個(gè)ajax請(qǐng)求,瀏覽器是會(huì)把你提交的params作為Payload展示出來(lái),因?yàn)樗膊恢纏arams來(lái)自哪里。

但如果你提交的請(qǐng)求設(shè)置了method="POST" 并且header設(shè)置了Content-Type: application/x-www-form-urlencoded或者Content-Type: multipart/form-data,那么你的請(qǐng)求看起來(lái)就是下面這樣的,類似GET請(qǐng)求里的參數(shù)拼接:

POST /some-path HTTP/1.1 Content-Type: application/x-www-form-urlencoded foo=bar&name=Jack

這里的form data就是request payload,在這里瀏覽器知道的更多:他知道bar是表單foo的值Jack是name的值,所以這里做了展示。

在回到之前的問(wèn)題,通過(guò)觀察圖片發(fā)現(xiàn),兩者的區(qū)別確實(shí)是因?yàn)閔eader中Content Type的值設(shè)置不同導(dǎo)致的:


2057617657-60531c0cd3d0b_fix732.png

通過(guò)查看request.js證實(shí)了這個(gè)驗(yàn)證:


2820148121-60531c24acc84_fix732.png

解決辦法:

在請(qǐng)求中,設(shè)置一個(gè)header即可


3656953970-60531c33aef35_fix732.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容