当前位置:网站首页>为什么图片传输要使用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也是浏览器直接支持的一种格式。如下可以直接展示。
边栏推荐
- IDEA快捷键大全
- BLOB,TEXT GEOMETRY or JSON column 'xxx' can't have a default value query 问题
- CVPR 2022 | 大幅减少零样本学习所需的人工标注,提出富含视觉信息的类别语义嵌入(源代码下载)...
- Install and use MAC redis, connect to remote server redis
- 自主工业软件的创新与发展
- 做事的真正意义和目的,真正想得到什么
- Blob, text geometry or JSON column'xxx'can't have a default value query question
- JVM memory layout detailed, illustrated, well written!
- xshell/bash/zsh 等终端鼠标滚轮乱码问题(转)
- Huahao Zhongtian rushes to the scientific and Technological Innovation Board: the annual loss is 280million, and it is proposed to raise 1.5 billion. Beida pharmaceutical is a shareholder
猜你喜欢

Mask wearing detection based on yolov1

2022 practice questions and mock exams for the main principals of hazardous chemical business units

Understanding and difference between viewbinding and databinding

SCM polling program framework based on linked list management

自主工业软件的创新与发展

测试流程整理(3)

1200. Minimum absolute difference

Summary of recent days (non-technical article)

MySQL8版本免安装步骤教程

sharding key type not supported
随机推荐
常见 content-type对应表
Huahao Zhongtian sprint Technology Innovation Board: perte annuelle de 280 millions de RMB, projet de collecte de fonds de 1,5 milliard de Beida Pharmaceutical est actionnaire
[R language data science]: cross validation and looking back
英视睿达冲刺科创板:年营收4.5亿 拟募资9.79亿
【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结
忠诚协议是否具有法律效力
Five "potential errors" in embedded programming
Detailed explanation of Fisher information quantity detection countermeasure sample code
Install MySQL
吃透Chisel语言.04.Chisel基础(一)——信号类型和常量
Introducing testfixture into unittest framework
Code hoof collection of wonderful secret place
How to choose a technology stack for web applications in 2022
自主工业软件的创新与发展
R语言使用epiDisplay包的followup.plot函数可视化多个ID(病例)监测指标的纵向随访图、使用stress.col参数指定强调线的id子集的颜色(色彩)
Automatic filling of database public fields
【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
基于PaddleX的智能零售柜商品识别
使用默认路由作为指向Internet的路由
Understand chisel language thoroughly 05. Chisel Foundation (II) -- combinational circuits and operators