相关:

图解 Base64 实现原理并使用 js 实现一个简单的 Base64 编码器

常用加密方法之Base64编解码及代码实现

一直都知道在http协议中使用base64的方式传递二进制文件,虽然感觉不理解,但是也都从来没有探究过原因,今天突然看到这方面的资料,这才有了一些理解。

PS:

把带有图片的网页保存为本地的mhtml文件的时候也会同时把图片这种二进制文件直接保存为base64编码并嵌入到文本文件中。

注意:

本文并不讨论base64编码的具体格式,以及base64编码与其他格式之间的转换规则。

给出下面的解释:

引自:https://juejin.cn/post/7365074668207767602

作者:Moment

不同系统的数据处理差异

早期的通信系统和协议设计主要是基于文本数据的传输。这些系统可能无法正确处理非文本数据(如二进制文件),因为某些二进制值可能会被解释为控制字符(例如,行结束符、回车符等),这会干扰数据的正确传输和解释。

操作系统差异(如 Windows、macOS、Linux)会影响文件管理和系统调用的方式。例如,文件路径表示方法在 Windows 系统中通常使用反斜杠(\),而在 UNIX-like 系统(如 Linux 和 macOS)中使用正斜杠(/)。此外,文件系统(如 NTFS、HFS+、EXT4)的差异也会影响文件属性的支持、文件大小限制和性能表现。

总结的来说,就是http协议只能传输文本格式,即只能传输ASCII码格式,但是二进制文件中会出现在ASCII中无法显示的格式(二进制文件中的0/1出现是随机的,因此会出现不可打印的ASCII码字符,即控制字符),而这些不可显示的ASCII中的控制字符会影响早期的http协议的正常工作和交互过程的,因此不能直接把二进制文件转成ASCII格式进行http协议传输,于是就有了base64格式编码方式来讲二进制文件重新编码为base64格式后再进行http协议传输。

更多关于web通信中使用base64编码的资料建议参考:

图解 Base64 实现原理并使用 js 实现一个简单的 Base64 编码器

还有个特性,那就是base64编码后传输数据会增加:

Base64 编码后的数据比原始二进制数据大约增加 33%

为什么在http协议中使用base64编码方式传输二进制文件的更多相关文章

  1. iOS 中使用Base64编码方式编码图片数据

    最近一个项目要求对图片数据简单加密下,就是那种不能直接看到图片内容就行.于是我使用了base64编码对图片数据进行编码,把图片2进制数据变成了base64的字符串,再把这个字符串保存到server的数 ...

  2. Python中进行Base64编码和解码

    Base64编码 广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有“=”,生成的编码都是ascii字符.优点:速度快,ascii字符,肉眼不可理解缺点:编码比较长,非常容 ...

  3. base64编码方式

    一.编码的两大方式: 在python3.x中,字符串编码分为unicode和bytes两大类编码方式. 直接书写s='中国人',这种方式定义的编码方式为unicode,是通用的方式. 另一种是byte ...

  4. Python中的Base64编码的加密与解密

    Base64 可以干些啥? Base64编码的作用: 由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法. 图片(and种子)base64 ...

  5. Java 8中的Base64编码和解码

    转自:https://juejin.im/post/5c99b2976fb9a070e76376cc Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引 ...

  6. 在网页中嵌入Base64编码文件

    大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAk ...

  7. 在python中实现BASE64编码

    什么是Base64编码 BASE64是用于传输8Bit字节的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法. 如下是转换表:The Base64 Alphabet Base64编码可以 ...

  8. JS中使用base64编码上传下载文件

    下载文件:使用FileSaver.js   https://github.com/eligrey/FileSaver.js/blob/master/README.md 手机端UC浏览器无法下载  安卓 ...

  9. JS 和 Java 中URL特殊字符编码方式

    前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1.  编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...

  10. java中的字符编码方式

    1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下. 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符 ...

随机推荐

  1. 关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路

    关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路 WrongFirst: 我准备了一个正常类BG和一个有错误的类HelloWor ...

  2. C语言基础- Hello World

    第一个C语言程序 Hello World # include <stdio.h> //#关键标识符,表示用用头文件:include:引入都文件关键字 // stdio.h:系统标准输入.输 ...

  3. Go 互斥锁 Mutex 源码分析 (一)

    0. 前言 锁作为并发编程中的关键一环,是应该要深入掌握的. 1. 锁 1.1 示例 实现锁很简单,示例如下: var global int func main() { var mu sync.Mut ...

  4. C++11新特性(二):语言特性

    C++11新特性 nullptr空指针 nullptr空指针的使用可以规避掉以往设置为NULL的风险.NULL在编译器中常常被设置为0或者其它数字,此时判断指针是否为NULL,即判断指针类型是否能够等 ...

  5. cdh6.3.2 hue集成hbase

    参考地址:https://blog.csdn.net/u010886217/article/details/98606976

  6. 操作 JAR 文件

    列出 JAR 文件内容 使用 jar 命令来列出 JAR 文件的内容: jar tf myapp.jar -t 选项表示列出文件,-f 表示指定 JAR 文件. 解压 JAR 文件 使用 jar 命令 ...

  7. 【DVWA】安全测试工具之BurpSuite

    一.应用场景 二.安装软件 官网下载地址:https://portswigger.net/burp/releases 下载版本2021.7 注册机的 Github 项目地址:TrojanAZhen/B ...

  8. release版本 APP 出现waiting for debugger

    前提:同一包代码,打包两个版本,修改包名,在同一设备上存在两个版本 状态:运行时,发现 一版本是正常 另一版本打开会提示 Waiting for debugger弹窗,(此时由于是开发状态,设备一直开 ...

  9. three.js实现太阳系

    前言 刚开始使用three.js时会不太熟悉,想写一些项目增加理解,网上翻了好多文章,不是画立方体就是画三角形,最后偶然看到这个网站,十分炫酷. 我们也许没那么牛逼,但我们可以整个简略版的太阳系来练练 ...

  10. RxJS 系列 – Utility Operators

    前言 前几篇介绍过了 Creation Operators Filtering Operators Join Creation Operators Error Handling Operators T ...