最近做项目的时候,在通过post请求向服务端发送数据的时候,请求失败了。错误信息如下:

返回的400(bad request)错误,说明客户端这边发送的请求是有问题的。

和通过jquery中的ajax方法发送的请求作对比。发现问题出在了请求的主体部分。

这里的请求主体部分是payload的形式的。

而直接通过jq,是如下这种formdata形式。

formData是什么?

formData是客户端主体部分组装数据的一种方式,当我们使用:

  1. method='POST'提交一个HTML-Form表单
  2. 如上图中黄色部分的content-Type:application/x-www-form-urlencoded
  3. content-Type:multipart/form-data

这三种方式去提交请求主体的时候,就是formData形式。

将如上的请求简写一下:

起始行:POST /getProduct HTTP/1.1
首部: Content-Type: application/x-www-form-urlencoded 主体1:productId=3189 单参
主体2:productId=3189&orderId=145 多参

主体的形式会有两种,在多参数的情况下,和get请求一样,是用&进行连接的。

$.ajax({
url : '/v2/product/getProductProp',
data :{
'productId' :proid,
},
type: 'post',
})
.then(function(data) {
//TODO
})
.fail(function() {
that.fetchDataFailed();
})
.done(function() {
//TODO
});

在jq的ajax模块中,contentType的默认是使用的formData发送主体的。既然如此的话,我们就通过传入自定义的contentType

$.ajax({
url : '/v2/product/getProductProp',
data :{
'productId' :proid,
},
type: 'post',
contentType:'application/json' //注意这里的不同
})
.then(function(data) {
//TODO
})
.fail(function() {
that.fetchDataFailed();
})
.done(function() {
//TODO
});

是的,我们确实成功的修改了formData的提交形式,变成了payload.

payload是什么?

payload是一种以JSON格式进行数据传输的一种方式。

http可能会传输payload,如果不限制其请求的方式(那么请求的方法就是OPTIONS)或者响应的状态码,其包含元数据,头部区域和数据。

如果数据是通过正常的put或者post方法发送的,那么payload就是一个http请求起始行紧接一个CRLF后面的那一部分。

起始行:POST /getProduct HTTP/1.1
首部: Content-Type: application/json 主体1:{"productId":3189} 单参
主体2:{"productId":3189,"orderId":145} 多参

同样的,我们可以将payload形式的参数。通过formData()来组装。

通过formData()组装后的数据就像表单数据一样,变成了键/值对的形式。

小结

  • 首部属性contentType可以改变请求的数据提交方式:application/json(payload),application/x-www-form-urlencoded(formData)
  • 服务端的响应方式决定客户端的提交方式
  • 使用formData()可以通过payload提交表单数据:multipart/form-data

【请求之密】payload和formData有什么不同?的更多相关文章

  1. HTTP请求中 request payload 和 formData 区别?

    原文地址: http://www.cnblogs.com/tugenhua0707/p/8975615.html FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过C ...

  2. payload和formData有什么不同?

    最近做项目的时候,在通过post请求向服务端发送数据的时候,请求失败了.错误信息如下: 返回的400(bad request)错误,说明客户端这边发送的请求是有问题的. 和通过jquery中的ajax ...

  3. web过滤器中获取请求的参数(content-type:multipart/form-data)

    1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; ...

  4. Upload 上传 el-upload 上传配置请求头为Content-Type: "multipart/form-data"

    api接口处添加属性 (标红处) // 校验台账 export const checkEquiment = (data) => { return axios({ url: '/job/equip ...

  5. Java java httpclient4.5 进行http,https通过SSL安全验证跳过,封装接口请求 get,post(formdata,json)封装,文件上传下载

    package api; import java.util.*; import java.net.URI; import org.apache.http.Consts; import org.apac ...

  6. vue post 请求 是 request payload 而不是 FromData ,以及 格式转换成 FromData 需要的 key value 格式

    export function 方法名字(传进来要给后端的参数){     return request({         url : ' 后端提供的接口路径  ',         method  ...

  7. HTTP的FormData和Payload的传输格式

    FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过Content-Type来进行区分的(了解Content-Type),如果是 application/x-www-f ...

  8. Jmeter put 方法总结

    1.百度到很多关于jmeter put 方法的使用 ,但觉得都完全 下面我大致总结下 : >1.放入 url 中 如:www.*****.com?a=1&b=2 ; >2.放入到p ...

  9. python爬虫如何POST request payload形式的请求

    python爬虫如何POST request payload形式的请求1. 背景最近在爬取某个站点时,发现在POST数据时,使用的数据格式是request payload,有别于之前常见的 POST数 ...

随机推荐

  1. ASP.NET Gridview数据库绑定支持增删改,记得要完整实现

    1.错误情况 /WebSite3"应用程序中的服务器错误. 指定的参数已超出有效值的范围. 参数名: index 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息, ...

  2. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  3. 《安卓网络编程》之第五篇 WebView的使用

    Android提供了WebView组件,,在Android的所有组件中,WebView的功能是最强大的,是当之无愧的老大.WebView组件本身就是一个浏览器实现,她的内核是基于开源WebKit引擎. ...

  4. 多线程编程-- part 2 线程的生命周期和优先级

    线程的创建到消亡的历程: java多线程的5种状态: (1)New(新建) new Thread(run()) 该线程还没开始运行,状态是new,在程序运行前还有一些基础工作要做 (2)runnabl ...

  5. 深入解析java String中getBytes()的编码问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6900536.html Java服务器后台在和Android端App通信时,遇到了两端关于用MD5加密同一包含 ...

  6. opencv基础到进阶(2)

    本文为系列文章的第2篇,主要讲解对图像的像素的操作方法. 2.1存取像素值 为了存取矩阵元素,需要指定元素所在的行和列,程序会返回相应的元素.单通道图像返回单个数值,多通道图像,返回的则是一组向量(V ...

  7. 弹出框插件layer使用

    layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 插件官方地址:http://layer.layui.co ...

  8. fidder从基础到熟练

    一.fidder介绍 1.Fiddler是一款由C#语言开发的免费http调试代理软件,有.net 2 和 .net 4 两种版本.Fiddler能够记录所有的你电脑和互联网之间的http通讯,Fid ...

  9. 如何通过JS实现简单抖动效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. JS 使用 splice() 对数组去重

    一 问题 有如下 js 数组 connect_clients,需要在去掉所有元素中 user_id, goods_id 这两者的值都相同的元素. [ { id: 'eff040fb-92bc-4f24 ...