HTTP中form-data、x-www-form-urlencoded、raw、binary的区别

前言

在日常接口对接工作中经常遇到如上HTTP请求类型,虽然最常用的是POST但是即便这种方式也会在第三方应用中看到不同的请求格式;现总结下以方便区分。

常见的请求类型

格式 说明
form-data 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以boundary标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件
x-www-form-urlencoded 就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对name=java&age = 23 ,当模拟表单上传数据时,用此选项,但不能上传文件,只能是文本格式
raw 可以上传text、json、xml、html等格式,当后端要求json数据格式的时候,就要使用此种格式来测试
binary 相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。这个不是很常用
GraphQL 不常用

需要注意的是multipart/form-data与x-www-form-urlencoded区别:

multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;

x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

multipart/form-data格式

每个字段可以指定不同的格式,text和file;相比其他格式它的最大区别

可以看到它会把form中的字段合成一个报文字符串,然后每个字段用boundary的随机字符串值做分割线,而数据则根据每个分割中的Content-Type类型加载不同的数据,默认是字符串,如果是文件则会加载文件二进制数据;

bash 复制代码
GET /interfaceService/hrpjob/00 HTTP/1.1
Host: localhost:8607
Content-Length: 374
Content-Type: multipart/form-data; 
boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name"

zjcjava
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="age"

18
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file1"; filename="/C:/Users/zjcjava/Downloads/1.jpg"
Content-Type: image/jpeg

(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW

x-www-form-urlencoded格式

会把form中的数据合并为键值对的方式用&拼接为一个字符串;这种格式不能上传文件,只能传递文本字符串

bash 复制代码
GET /interfaceService/hrpjob/00 HTTP/1.1
Host: localhost:8607
Content-Type: application/x-www-form-urlencoded
Content-Length: 19

name=zjcjava&age=18

raw格式化字符串格式

Content-Type必须指定统一格式化类型,可以上传text、json、xml、html等格式,里面只有一种格式参数

bash 复制代码
GET /interfaceService/hrpjob/00 HTTP/1.1
Host: localhost:8607
Content-Type: application/json
Content-Length: 22

{
    "adf": 13243
}
相关推荐
XiaoMaqqqq21 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
ShyanZh1 天前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp
汤姆yu1 天前
Gemini 4 Argon模型综述:技术、能力与实际使用指南
网络·安全·web安全·ai·大模型
Seraphina361 天前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
DP DPharness1 天前
StudyMate 从安装到第一节课的完整操作路径
人工智能·websocket·网络协议·智能手机·dpharness
2401_868534781 天前
无线网络规划设计
服务器·网络
螺蛳粉 螺蛳粉1 天前
第二篇:keepalived VRRP 原理篇:协议与 VIP 漂移机制深入解析
网络·智能路由器·负载均衡·keepalived·高可用
盟接之桥1 天前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
2603_969579281 天前
内网数据自动备份工具:隔离网络下的数据保护方案
网络
逗脑IDE1 天前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发