当前位置:网站首页>为什么图片传输要使用base64编码
为什么图片传输要使用base64编码
2022-07-04 12:51:00 【诗人不写诗】
一、背景知识
一般使用HTTP协议,传输的是字符文本或二进制数据,这2种场景覆盖了几乎所有使用HTTP协议的场景。HTTP协议规定,使用Content-Type请求头来约定传输消息的类型,这决定了请求方如何组织数据(编码和格式)以及接收方如何解析数据。Content-Type常用的取值有如下几种:
1、application/x-www-form-urlencoded
这种方式发送的数据在url上拼接,以key1=val1&key2=val2 的方式进行编码,key和val都进行了 URL转码,这是一种表单提交方式,表单意思是有多个值。
2、multipart/form-data
从名字上看,传输的数据是多份的,且是表单的格式,这种方式其实是一个功能强大的方式,几乎可以满足所有数据传输要求,只是使用起来不太直接,所以我们只使用这种方式来提交文件,因为文件只能以字节流的形式传输,以传输一个文件为例,需要一个key,可以命名为myFile,然后需要定义value 类型和内容,类型是fille,内容就是文件字节流。服务方需要先根据myFIle取出文件,然后根据类型解析。
3、application/json
这种方式将数据以json格式组织,放在body里发送。
4、text/xml
这种方式将数据以xml格式组织,放在body里发送,这种格式逐渐被json取代,因为,json格式更加简洁明了。
二、实际使用
我们在传输图片时,有可能是前后端交互,有可能是2个后端交互,处理方式通常不同,由于前端负责界面交互,在发送HTTP请求时通常具备丰富的Content-Type,所以前端在发送图片时,就会使用multipart/form-data这种方式,这也是前后端默认的规则。
但是在2个后端进行交互时,默认的数据格式是application/json,所以对图片这种数据就要进行转化,通常,我们在得到了图片的字节流byte[ ]后,不会在json中直接传输byte[ ],因为担心传输过程中,有服务对其进行隐式编码然后解码,这就导致字节流发生了变化,所以我们在传输源头就进行base64编码,因为base64使用的ASCII编码是所有编码方式都支持的,即使传输过程中有服务对其进行编解码,也能原样还原。所以使用base64编码是一种安全策略,但是base64会导致体积增大约三分之一。
另外,base64也是浏览器直接支持的一种格式。如下可以直接展示。
边栏推荐
- find命令报错: paths must precede expression(转)
- 读取 Excel 表数据
- markdown 语法之字体标红
- sharding key type not supported
- Five "potential errors" in embedded programming
- How to choose a technology stack for web applications in 2022
- Understand chisel language thoroughly 04. Chisel Foundation (I) - signal type and constant
- 基于YOLOv1的口罩佩戴检测
- 好博医疗冲刺科创板:年营收2.6亿 万永钢和沈智群为实控人
- 软件测试之测试评估
猜你喜欢
安装Mysql
Yingshi Ruida rushes to the scientific and Technological Innovation Board: the annual revenue is 450million and the proposed fund-raising is 979million
Product identification of intelligent retail cabinet based on paddlex
[FAQ] summary of common causes and solutions of Huawei account service error 907135701
使用默认路由作为指向Internet的路由
JVM 内存布局详解,图文并茂,写得太好了!
sharding key type not supported
392. 判断子序列
Use the default route as the route to the Internet
1200. Minimum absolute difference
随机推荐
[FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions
Lick the dog until the last one has nothing (state machine)
Unittest中的TestSuite和TestRunner
JVM memory layout detailed, illustrated, well written!
[C question set] of VII
Understanding and difference between viewbinding and databinding
国内酒店交易DDD应用与实践——代码篇
Can mortgage with housing exclude compulsory execution
Understand chisel language thoroughly 10. Chisel project construction, operation and testing (II) -- Verilog code generation in chisel & chisel development process
吃透Chisel语言.04.Chisel基础(一)——信号类型和常量
R语言使用epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布
Gorm 读写分离(转)
LifeCycle
Fs4059c is a 5V input boost charging 12.6v1.2a. Inputting a small current to three lithium battery charging chips will not pull it dead. The temperature is 60 ° and 1000-1100ma is recommended
英视睿达冲刺科创板:年营收4.5亿 拟募资9.79亿
Automatic filling of database public fields
Qt如何实现打包,实现EXE分享
Doctoral application | West Lake University Learning and reasoning system laboratory recruits postdoctoral / doctoral / research internship, etc
Blob, text geometry or JSON column'xxx'can't have a default value query question
TestSuite and testrunner in unittest