POST 的两种方式区别:form-data 和 x-www-form-urlencoded [ 2.0 版本 ]
在使用postman调接口的时候发现使用post方式的时候不管使用form-data和x-www-form-urlencoded的情况,我通过
print_r(\Yii::$app->getRequest()->post());
打印的值都是一样的,详细见图片
然后我使用put方式试试看,结果如图
网上都说form-data的数据格式就是如下格式
[----------------------------961448793903793318528971
Content-Disposition:_form-data;_name] => "token"
8gumyDwEdEo2fhr6xnL2pGQku_4zTK7W
----------------------------961448793903793318528971--
为什么 post 使用 form-data
就不是这种格式呢??
共 4 个回答
-
你不要认为post一定是x-www-form-urlencoded。实际上post只是http的一种请求方法而已。至于你的请求行,请求header,请求body都是可以定义的。所以到底是x-www-form-urlencoded还是form-data你完全可以自定义。
话说回来,通常情况下,普通的表单提交默认都是urlencoded;而如果是文件上传,则必须是form-data。
至于为啥,其实第一个回答者说到点上了,那就是传输的内容不同。文件(附件)这些属于文件流;urlencoded多半是url编码过的普通键值对文本。
另外多说一句,post其实除了可以上述两种之外,还有直接传递一个普通的字符串,只要你的content-type设置正确匹配就行。你既然用过postman肯定见到过。
再多说一句,你发现它们的不同很好,多多练习和发问。然后看看http协议本身的一些东西,一边练习一边思考,你的水平就上来了。思考,编程,思考,编程,思考,编程。。。。。。
xyf90314
注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
最后登录:2023-03-13
在线时长:95小时23分
- 粉丝21
- 金钱5257
- 威望40
- 积分6607