Form Data 和 Request Payload 有什么区别?为什么后台收不到参数报400错误?

引言

请求后台的一个新接口突然报错400 (Bad Request),但在 YAPI 中却可以正常使用,这是因为啥呢?
在这里插入图片描述
经过和其他类似的接口对比发现,问题出现在Content-Type上面,正常的接口是用的application/x-www-form-urlencoded; charset=utf-8",请求体为:Form Data格式;而错误的这个接口用的是application/json;charset=UTF-8,请求体为:Request Payload
在这里插入图片描述

x-www-form-ulencoded和json区别?

要解决这个问题首先要知道这俩啥区别,在搞清楚之前先了解一下Content-Type是什么,都有哪些类型。
Content-Type标头其实就是为了告诉接收双方所携带的数据类型,就和我们电脑中使用的文件后缀一样,这样我们才知道用什么类型打开它。常见的数据类型有:
在这里插入图片描述
最开始的时候是text/plain;charset=UTF-8类型,这种是字符串的形式,里面传啥样都无所谓,如:“Hello World”;后来出现了表单application/x-www-form-urlencoded类型,这种形式主要是以key-value的方式存在,键值对通过&隔开,如:username=admin & password=123456;随着互联网的发展,传统表单已经满足不了需求了,就出现了各种多媒体类型的格式,现在我们用的最多还是JSON格式:application/json,即传输内容均是JSON格式化后的对象,如:{“username”: admin , “password”: 123456}

总结一下

Content-Type为:application/x-www-form-urlencoded 时,浏览器以 FormData 体现
Content-Type为:application/json 时,浏览器以 requestPayload 体现
其实无论使用那种类型,只要前后端都约定好就不会出问题。我这里出问题是因为后台接口使用了form表单的格式接受,要解决这个问题要么把后台的接受格式改为接受JSON对象的格式保持和前端统一,要么前端修改一下Content-Type为form表单的形式。

解决

我这里修改前端代码,将Content-Type自定义为:application/x-www-form-urlencoded
在这里插入图片描述
请求成功,希望对你的问题有所帮助!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值