当前位置:网站首页>为什么图片传输要使用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也是浏览器直接支持的一种格式。如下可以直接展示。
边栏推荐
- 吃透Chisel语言.08.Chisel基础(五)——Wire、Reg和IO,以及如何理解Chisel生成硬件
- Worried about "cutting off gas", Germany is revising the energy security law
- R语言使用lattice包中的bwplot函数可视化箱图(box plot)、par.settings参数自定义主题模式
- Understand chisel language thoroughly 05. Chisel Foundation (II) -- combinational circuits and operators
- CVPR 2022 | greatly reduce the manual annotation required for zero sample learning, and propose category semantic embedding rich in visual information (source code download)
- IP 实验室月复盘 · 第 5 期
- Product identification of intelligent retail cabinet based on paddlex
- Code hoof collection of wonderful secret place
- 安装Mysql
- 基于PaddleX的智能零售柜商品识别
猜你喜欢

Understand chisel language thoroughly 12. Chisel project construction, operation and testing (IV) -- chisel test of chisel test

CVPR 2022 | 大幅减少零样本学习所需的人工标注,提出富含视觉信息的类别语义嵌入(源代码下载)...

205. 同构字符串

Five "potential errors" in embedded programming

Qt如何实现打包,实现EXE分享

sharding key type not supported

吃透Chisel语言.09.Chisel项目构建、运行和测试(一)——用sbt构建Chisel项目并运行

Install Trinity and solve error reporting

Mask wearing detection based on yolov1
![[FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions](/img/43/1a9786c89a5ab21d1fb8903cb7b77e.png)
[FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions
随机推荐
【FAQ】華為帳號服務報錯 907135701的常見原因總結和解决方法
Gorm read / write separation (rotation)
Unity Shader学习(三)试着绘制一个圆
基于PaddleX的智能零售柜商品识别
find命令报错: paths must precede expression(转)
Error in find command: paths must precede expression (turn)
吃透Chisel语言.03.写给Verilog转Chisel的开发者(没有Verilog基础也可以看看)
IP lab monthly resumption · issue 5
TestSuite and testrunner in unittest
测试流程整理(2)
R语言使用dplyr包的mutate函数对指定数据列进行标准化处理(使用mean函数和sd函数)并基于分组变量计算标准化后的目标变量的分组均值
QT how to detect whether the mouse is on a control
golang fmt.printf()(转)
测试流程整理(3)
Unittest框架之断言
学内核之三:使用GDB跟踪内核调用链
Unity shader learning (3) try to draw a circle
小程序直播 + 电商,想做新零售电商就用它吧!
Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
Code hoof collection of wonderful secret place