我的任务是将图像上传到远程服务器并将这些图像保存在本地。通过JSON进行Base64传输并使用Node.js进行存储非常容易。但是,是否有理由不使用这种类型的文件上传,使用 AJAX 或其他方式?(除了我知道的30%的带宽增加。您仍然可以将其包含在您的答案中,以便它已满)。
base64 编码的想法是避免基于文本的协议的二进制数据。在这种情况下,我认为这总是一个坏主意。
优点
- 避免基于文本的协议使用二进制数据,并独立于外部文件。
- 避免分隔符冲突。
缺点
时间和空间增加了- 复杂性;对于空间,它增加了33-36%(编码本身增加了33%,插入的换行符增加了3%)。
- API 响应有效负载更大/太大。
- 用户体验会受到负面影响,除非调用一些延迟加载。
通过将所有图像数据一起包含在一个 API 响应中,应用可以 在屏幕上绘制任何内容之前必须接收所有数据。这意味着 用户将在屏幕上看到更长时间的加载状态,并且应用程序将 在用户等待时显得迟钝。
然而,这可以通过 Axios 和一些惰性加载器(如 react-lazyload 或 lazyload 等)来缓解。
- CDN 缓存更难。与图像文件相反,API 响应中的 Base64 字符串无法通过 CDN 缓存传递。整个 API 响应必须由 CDN 提供。(参见,不要在移动设备上使用 Base64 编码的图像和为什么使用 Base64 "优化"图像几乎总是一个坏主意)
- 无法再在设备上缓存图像。
- 服务器端的内容管理变得更加困难。大多数内容管理工具将图像作为二进制文件处理。但是,在二进制管理时,存在编码/解码的时间开销。
- 在工程中没有安全增益和开销来缓解(清理、输入验证、转义)。XSS 攻击示例:使用 Base64 编码防止 XSS:Web 应用程序安全性的错误感觉
该网站的开发人员可能选择通过拥有神秘的URL等来使网站看起来更安全。然而,那 并不意味着这是默默无闻的安全。
如果他们的网站容易受到SQL注入的影响,并且他们试图通过编码URL来隐藏它,那么它就是默默无闻的安全性。如果他们的网站对SQL注入有很好的保护;XSS;企业社会责任;等等,他们想像这样对 URL 进行编码,那么这简直是愚蠢的。
它对文本编码的图像(如 svg)没有帮助(可能不是 Base64 SVG)
数据 URI 在 IE6 或 IE7 上不受支持,在 7.2 之前的 Opera 上也不支持(哪些浏览器支持数据 URI,从哪个版本开始?
引用
https://en.wikipedia.org/wiki/Base64
https://en.wikipedia.org/wiki/Delimiter#Delimiter_collision
SO:base 64 编码的用途是什么?
https://medium.com/snapp-mobile/dont-use-base64-encoded-images-on-mobile-13ddeac89d7c
https://css-tricks.com/probably-不要碱64-svg/
https://security.stackexchange.com/questions/46362/purpose-of-using-base64-encoded-urls
https://bunnycdn.com/blog/why-optimizing-your-images-with-base64-is-almost-always-a-bad-idea/
https://www.davidbcalhoun.com/2011/when-to-base64-encode-images-and-when-not-to/
数据编码
每个数据编码和解码都可以用于各种原因,这带来了好处和缺点。
喜欢:
错误检测- 编码 :可以检测错误但增加数据使用量。
- 加密编码:将数据转换为入侵者不会破译的密码。
编码算法可以改变数据 这样做有一些用处。
但与
Base64编码,它将每6位数据编码为一个字符(8位)。3 字节到 4 字节,但它只包括字母数字(62 位)和 2 个符号。
它的好处是它 剂量没有特殊的字符和符号
Base64 目的
它可以通过禁止我们拥有的渠道传输任何数据:
- 像
' " /
这样的特殊字符... - 不可打印的 Ascii 如