首页 > 其他分享 >form-data、x-www-form-urlencoded的区别

form-data、x-www-form-urlencoded的区别

时间:2024-02-06 18:23:49浏览次数:35  
标签:www 字节 form data urlencoded 上传

我们在平时的postman请求调试,以及web的http请求开发时,常常能看到以下几种传参的形式 form-data、x-www-form-urlencoded、raw、binary,那么这些请求方式的区别是什么呢?

1)form-data

就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;

由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

 

上图中我们可以看到在postman中form-data选项,key是有下拉选择项的,这也说明了form-data类型支持key-value和文件传输。

 

上图中我们可以看到,明显的不同的key参数之间是有boundary分割的。每个参数都有Content-Disposition: form-data; name="xxx"信息

2)x-www-form-urlencoded

就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23

我们可以看到,这个形式的传参方式,postman的key是并没有像form-data一样改出File的下拉选项的,这也说明了这种方式只支持string的key-value值传递。

在上图中我们也能明显的看到在http的body体中传输的格式。同时我们也看到对于存在中文和空格的情况,它是会进行转换的。

1、它是post的默认格式,使用js中URLencode转码方法。包括将name、value中的空格替换为加号;将非ascii字符做百分号编码;将input的name、value用‘=’连接,不同的input之间用‘&’连接。
2、百分号编码什么意思呢。比如汉字‘丁’吧,他的utf8编码在十六进制下是0xE4B881,占3个字节,把它转成字符串‘E4B881’,变成了六个字节,每两个字节前加上百分号前缀,得到字符串“%E4%B8%81”,变成九个ascii字符,占九个字节(十六进制下是0x244534254238253831)。把这九个字节拼接到数据包里,这样就可以传输“非ascii字符的 utf8编码的 十六进制表示的 字符串的 百分号形式”,_
3、同样使用URLencode转码,这种post格式跟get的区别在于,get把转换、拼接完的字符串用‘?’直接与表单的action连接作为URL使用,所以请求体里没有数据;而post把转换、拼接后的字符串放在了请求体里,不会在浏览器的地址栏显示,更安全一些。
4、对于一段utf8编码的字节,用application/x-www-form-urlencoded传输其中的ascii字符没有问题,但对于非ascii字符传输效率就很低了(汉字‘丁’从三字节变成了九字节),因此在传很长的字节(如文件)时应用multipart/form-data格式。smtp等协议也使用或借鉴了此格式。
5、multipart/form-data将表单中的每个input转为了一个由boundary分割的小格式,没有转码,直接将utf8字节拼接到请求体中,在本地有多少字节实际就发送多少字节,极大提高了效率,适合传输长字节。

3)raw

可以上传任意格式的文本,可以上传text、json、xml、html等

http的传输格式:

4)binary

相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

postman中也可以看出,下面只有一个select file的功能。也说明只能传文件。

辅助

postman有个很好用的功能预览代码,点击右侧code,选择格式

有多种格式,尤其是对于各种语言的功能,比如像Go语言,直接生成代码,简直太6了。大家也可以亲自看一下。代码简直是可以直接拿过去用了。

参考:

1. form-data、x-www-form-urlencoded的区别

2. postman中 form-data、x-www-form-urlencoded、raw、binary的区别

3. post使用form-data和x-www-form-urlencoded的本质区别

 

标签:www,字节,form,data,urlencoded,上传
From: https://www.cnblogs.com/blogtech/p/18010147

相关文章

  • 解决terraform部署storage account management policy问题
    承接上文TerraformAzurediagnosticsetting升级,之前说到azurerm_monitor_diagnostic_setting里的retentionpolicy已经deprecated了,需要用azurerm_storage_management_policy替换以recoveryservicevault的诊断设置为例,对应的azurerm_storage_management_policy可以参考下边的代......
  • ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'mysql&
    转自https://www.cnblogs.com/jiangfeilong/p/10560754.html 关键要授予 WITHGRANTOPTION;#原因:修改数据库账号时删除了默认的localhostroot, 新建了%root 但没有赋予全部权限;解决方法:1.关闭数据库#mysqldstop2.在my.cnf里加入skip-grant-tables3.停止服务器......
  • DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(二)
    为用户创建易访问的WindowsForms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。一个可访问的WinForms应用程序提供了各种好处,包括:扩大......
  • DataGrip 2023: 轻松管理您的数据库世界 mac/win版
    JetBrainsDataGrip2023是一款功能强大的数据库开发和管理工具,旨在帮助开发人员更轻松地管理和查询多个数据库。这个版本引入了一系列新的功能和改进,使数据库开发和管理变得更加简单和高效。→→↓↓载DataGrip2023mac+win版 首先,DataGrip2023支持更多的数据库系统和数据......
  • Cucumber步骤中传Data Table作为参数
    引用链接:http://cukes.info/step-definitions.htmlDataTablesDataTablesarehandyforspecifyingalargerpieceofdata:Giventhefollowingusersexist:|name|email|phone||Aslak|[email protected]|123||Matt|[email protected]|2......
  • mask2former出来的灰度图转切割轮廓后的二值图
    切割后的灰度图切割后的原图转成二值图代码如下点击查看代码#ThisisasamplePythonscript.importcv2importnumpyasnp#PressShift+F10toexecuteitorreplaceitwithyourcode.#PressDoubleShifttosearcheverywhereforclasses,files,toolwin......
  • [Performance] Memory pool
    Amemorypool,alsoknownasamemorybufferpool,isamethodusedinsoftwaredevelopmentformanagingmemoryallocation.Insteadofallocatinganddeallocatingmemoryindividuallyforeachnewobjectatruntime,whichcanbecostlyintermsofperforma......
  • DevExpress ASP.NET Web Forms v23.2最新版本系统环境配置要求
    本文档包含有关安装和使用 DevExpressASP.NETWebForms控件的系统要求的信息。点击获取DevExpressv23.2正式版.NETFrameworkDevExpressASP.NETWebForms控件和MVC扩展支持以下.NETFramework版本。IDEDevExpressASP.NET控件支持以下VisualStudio版本。Visual......
  • vue的scoped中的class data-v-xxx生成规则为什么是按照文件的路径?
    Vue.js中,当在单文件组件(.vue文件)的<style>标签上使用scoped属性时,VueLoader会为组件中的CSS添加一个唯一的属性选择器,以确保样式只作用于当前组件内的元素。这个独特的属性通常格式为data-v-xxx,其中xxx是一个根据文件内容和路径生成的哈希值。生成规则基于文件内容和......
  • DRIVERQUERY [/S system [/U username [/P [password]]]]               [/FO
    DRIVERQUERY[/Ssystem[/Uusername[/P[password]]]]       [/FOformat][/NH][/SI][/V]描述:  允许管理员显示已安装设备驱动程序  的列表。参数列表:   /S  system     指定要连接到的远程系统。   /U  [domai......