本文主要是介绍form-data和x-www-form-urlencode的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、解释
form-data
就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
x-www-form-urlencoded
就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23
multipart/form-data与x-www-form-urlencoded区别
multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息; x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。
二、抓包分析
看完上面所解释的, 下面我们抓包分析一下http协议中Post两个不同到底有什么区别
这里使用强大的http测试工具PostMan和抓包工具Wireshark
1、x-www-form-urlencoded
postman body选择x-www-form-urlencoded格式,添加2个key和value
可以看到http的header为
Content-Type: application/x-www-form-urlencoded\r\n
还有post的数据区只有一条信息,组成规则
键名1=值1& 键名2=值2
2、multipart/form-data
可以看到http的header为
Content-Type: multipart/form-data; boundary=--------------------------862898227956495955231239\r\n
还有post的数据区有2条信息,由3个boundary隔开
一条数据组成:Content-Disposition: form-data; name="键名" + 2个换行符 + 值
Content-Disposition: form-data; name="键名"\r\n\r\n值
3、multipart/form-data 上传文件
在上面的基础上,增加键名为uploadFile,类型选为file会弹出一个对话框选一个jpg文件
wireshark抓包
可以看到3条键值由4个boundary隔开
而且传文件的时候稍微和普通的键+文本值不同
规则是:
Content-Disposition: form-data; name="键名"; filename="文件名"\r\n
Content-Type: image/jpeg\r\n\r\n + JPG二进制数据
这篇关于form-data和x-www-form-urlencode的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!