http请求时Form Data & Request Payload的区别

在与后端的调试中发现一个问题,使用post发请求时,发送的params后端一直说没收到参数,F12发现参数确确实实已经发送了。如图:ajax

formData.png

使用swagger发送一样的参数请求却能够接收到:json

RequestPayload.png

经过比对发现,二者的不一样在于一个参数类型是Form Data,一个是Request Payload。什么意思呢?segmentfault

百度一下 你就知道后端

Request Payload更准确的说是http request的payload body。通常用在数据经过POST请求或者PUT请求。它是HTTP请求中空行的后面那部分。(PS:这里涉及一个http常被问到的问题,http请求由哪几部分组成,通常是请求行,请求头,空行,请求体。payload body应该是对应请求体。)api

一个请求伴随着header设置为Content-Type: application/json时,参数看起来是这样的:浏览器

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

若是你只是正常的请求一个ajax请求,浏览器是会把你提交的params做为Payload展现出来,由于他也不知道params来自哪里。post

但若是你提交的请求设置了method="POST" 而且header设置了Content-Type: application/x-www-form-urlencoded或者Content-Type: multipart/form-data,那么你的请求看起来就是下面这样的,相似GET请求里的参数拼接:url

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

这里的form data就是request payload,在这里浏览器知道的更多:他知道bar是表单foo的值Jack是name的值,因此这里作了展现。

在回到以前的问题,经过观察图片发现,二者的区别确实是由于header中Content Type的值设置不一样致使的:

compare.png

经过查看request.js证明了这个验证:

http.png

解决办法:

在请求中,设置一个header便可

api.png

相关文章
相关标签/搜索