引言
请求后台的一个新接口突然报错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
请求成功,希望对你的问题有所帮助!