首页 > 其他分享 >为什么在http协议中使用base64编码方式传输二进制文件

为什么在http协议中使用base64编码方式传输二进制文件

时间:2024-10-22 15:31:25浏览次数:8  
标签:文件 Base64 http 二进制 base64 传输 编码方式

相关:

图解 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%


标签:文件,Base64,http,二进制,base64,传输,编码方式
From: https://www.cnblogs.com/xyz/p/18492997

相关文章

  • 本地签发ssl证书(https)
    说明ssl证书主要用于https网络访问的安全认证工具下载本地自签证书程序https://github.com/FiloSottile/mkcert/releases命令行mkcert-v1.4.4-windows-amd64-?可以查看使用方法生成步骤1、mkcert-v1.4.4-windows-amd64-install 安装本地根证书2、生成自签证书:mkcert-v1.......
  • HTTP响应码、响应头、网址、重定向
    HTTP响应码、响应头、网址、重定向可以通过response对象的getcode()方法获得状态码,getheaders()方法获得响应头,geturl()方法获得网址。例子1:importsocketimporturllib.requestimporturllib.errorsocket.setdefaulttimeout(5)try:   res=urllib.request.urlopen('https:/......
  • 网站域名是https的,前端直接访问其他网站的http网址,为什么自动转成https的了
    当一个网站使用HTTPS(安全超文本传输协议)时,浏览器通常会自动将任何对HTTP(非安全超文本传输协议)网址的请求重定向到HTTPS版本。这种行为由多个因素引起,以下是一些可能的原因:1. HSTS(HTTPStrictTransportSecurity)HSTS是一种安全特性,允许网站声明被浏览器强制使用HTTPS。......
  • HTTP和HTTPS基本概念,主要区别,应用场景
    HTTP和HTTPS是用于在网络中传输数据的协议,虽然它们的功能类似,但在安全性上存在显著差异。1. HTTP的基本概念定义:HTTP是一种无状态的、面向请求-响应的协议,用于客户端(如浏览器)和服务器之间传输超文本数据(HTML、CSS、JavaScript等)。工作原理:客户端向服务器发送请求,服务器处......
  • 使用http请求jenkins 构建Job
    1.创建专门用于api的用户,授予对应项目的权限2.生成api_tocken3.远程构建打开job的构建界面复制url使用buildWithParameters接口http://192.168.xx.xxx:12000/view/运维工具/job/lijq-test/buildWithParameters授权处填写用户id作为用户名前面生成的api_tocken即为密......
  • 子域名太多如何实现HTTPS?一张通配符SSL证书全搞定
    在当今数字化时代,网站安全性已经成为网站运营者以及访问者都非常关注的重要问题。部署SSL证书实现HTTPS加密,确保数据传输安全,防止信息被泄露或篡改,消除浏览器“不安全”提示,提高网站安全性以及可信任度已成为必然趋势。然而,随着业务的发展,企业会解析很多子域名以满足日益增长的......
  • http://192.168.14.232/contest/59
    A:创历史新低dalao:d<=5,所以一个位置上只能是[i-d,i+d],考虑状压ljx'scode#include<bits/stdc++.h>usingnamespacestd;constintmaxn=505;constintmod=998244353;intread(){ intret=0,f=1;charch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-f;......
  • base64编码图片二进制数据后直接保存在html文件中
    相关内容:在markdown编辑器中嵌入base64图片看到一个帖子,那就是base64编码用来http服务中对二进制文件编码,那么可以不可以直接在html文件中使用base64编码后的字符串来表示图片呢,于是就有了本文的尝试。注意,这里使用的是markdown格式的图片插入链接格式,即\(![图片文字描述](图......
  • HTTPS抓包
    抓包工具BurpSuite:起个代理服务器,拦截和解析http请求Proxifier:给不支持设置代理的程序加上代理抓包对象浏览器CA证书添加到系统就行使用WinInet通信程序直接添加CA到系统就能搞定Proxifier+Fiddler抓取PC客户端数据包https://wiki.wireshark.org/TLSJava程......
  • Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http:
    目录1问题2解决办法3后记1问题Errorresponsefromdaemon:Get“https://registry-1.docker.io/v2/”:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)2解决办法touch/etc/docker/daemon.......