替换 Base64 - http/https 通信是否 8 位干净

Replacing Base64 - Is http/https communication 8 bit clean?

本文关键字:是否 通信 https Base64 http 替换      更新时间:2023-09-26

以下是8位清洁含义的概述。

在 Web 应用程序的上下文中,为什么图像保存为 Base64?与 8 位清洁相关的开销为 33%。

如果传输方法是安全的,则无需这样做。

但基本上,我的图像保存在服务器上的 Base64 中,并传输到客户端,众所周知,客户端可以读取 Base64。

这是 SO 帖子中 Base 64 的客户端版本。

如何在 JavaScript 中将字符串编码为 Base64?

http/https 8 位干净吗?

参考

http://www.princeton.edu/~achaney/tmve/wiki100k/docs/8-bit_clean.html

http://en.wikipedia.org/wiki/8-bit_clean

你在问两件不同的事情。

  1. 问:http 8 位干净吗?

    答:是的,HTTP"位8干净"。

  2. 问:在 Web 应用程序的上下文中,为什么图像保存为 Base64?

    答:图像通常不会保存在 Base64 中。事实上,它们几乎从不。它们通常以压缩二进制格式(PNG 或 JPG 或类似格式)保存、传输或流式传输

    Base64 用于在 HTML 中嵌入图像。

所以,你得到了一个图像logo.png.您可以将其静态包含在页面中,作为<img src='logo.png'>。图像以二进制方式通过HTTP传输,在浏览器和服务器端都没有编码。这是最常见的情况。

或者,您可以决定将图像的内容嵌入到 HTML 中。它有一些优点:浏览器不需要第二次访问服务器来获取图像,因为浏览器已经在HTML文件的同一HTTP GET响应中收到了它。但有一些缺点,因为HTML文件是文本,并且某些字符值可能对HTML(而不是HTTP)具有特殊含义,因此不能只将二进制值嵌入HTML文本中。您必须对它们进行编码以避免此类冲突。最常用的编码方法是 base64,它仅以 33% 的开销避免所有冲突。

RFC 2616s 摘要指出:

HTTP 的一个功能是数据表示的类型和协商,允许独立于正在传输的数据构建系统。

HTTP 始终以纯文本标头开头,并在此标头中指定内容类型。只要发送方和接收方同意此内容类型,一切皆有可能。

HTTP依赖于可靠的(识别文字游戏)传输层,如TCP。HTTPS 仅增加传输层(或传输层和 HTTP 之间的安全性,不确定这一点)。

所以是的,http(s)是8位干净的。

除了 PA 的回答和您的问题"但是,当您不需要它时,为什么要使用增加 33% 开销的编码方法?":因为这是不同概念的一部分!

HTTP传输任何类型的数据,http内容可以是带有嵌入图片的html文件。但是在收到该 html 文件后,浏览器或其他渲染器必须解释 html 内容。这遵循不同的标准,这些标准需要对任意数据进行编码。HTML不是8位干净的,事实上它甚至不是7位干净的,因为对使用的字符及其出现顺序有很多限制。

在 Web 应用程序的上下文中,为什么图像保存为 Base64? 与 8 位清洁相关的开销为 33%。

Base64 用于允许 8 位二进制数据在 ASCII 定义中显示为可打印文本。这只是 7 位,而不是 8 位,因为最后 128 个字符将取决于集合编码(Latin1、UTF8 等),这意味着如果在客户端/接收端设置了不同的编码类型,则编码数据可能会被破坏源。

由于 ASCII 中没有足够的可打印字符来表示所有 8 位值(具有绝对并且不依赖于编码本身),因此您需要"冲洗掉位",并且 base-64 保持足够高的数字以使字节能够表示为可打印字符。

这是您看到的 33% 开销,因为表示可打印范围之外的字符的字节值必须移动到可在 ASCII 表中打印的值;Base-64允许这样做(你也可以使用过去常见的可打印引用,即Usenet,电子邮件等)。

我正在考虑编写另一种编码类型来消除开销。

祝你好运:-)

与查询相关

  • HTTP 8位干净吗?

HTTP协议不完全是8位干净的协议。

HTTP 实体正文是 8 位干净的,因为有一个建议内容类型的规定,允许在此线程中的每个人指出的交互实体之间进行内容协商。

但是请求行、标头和状态行不是 8 位干净的。

为了发送任何二进制信息作为

  • 请求行,作为查询参数/路径段的一部分

  • 页眉

必须使用二进制到文本编码之一来保留二进制值。

例如,当发送签名作为查询参数或标头的一部分时,这是CDN采用的签名URL技术的情况,签名二进制信息必须被编码以保留它的二进制值。