• 为什么图片传输要使用base64编码


    一、背景知识

    一般使用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也是浏览器直接支持的一种格式。如下可以直接展示。

     

  • 相关阅读:
    【我的C/C++语言学习进阶之旅】C/C++编程笔记:C语言使用宏定义#define来处理通用的可抽取的代码块
    Google 开源库Guava详解(集合工具类)
    java毕业设计家庭理财管理系统(附源码、数据库)
    基于微信点餐外卖小程序系统设计与实现 开题报告
    Vue07/Vue dynamic动态组件
    数据结构之< AVLTree >
    Linux进程学习—进程的创建、控制与退出
    3.SpringBoot集成Mybatis Plus
    【2022全网最全教程】快速上手前端自动化测试
    v-if、v-for、列表的过滤与排序、强制绑定class和style、收集表单信息
  • 原文地址:https://blog.csdn.net/tales522/article/details/125571284