关于javascript:替换Base64 – http / https通信是否干净了8位?

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

下面是8位clean含义的概述。

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

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

但基本上,我的图像保存在服务器的base64中,并传输到客户机,我们都知道,客户机可以读取base64。

这里是一个so post中的base 64的客户端版本。

如何在javascript中将字符串编码为base64?

HTTP/HTTPS 8位是否干净?

参考文献

http://www.princeton.edu/~achaney/tmve/wiki100k/docs/8位u clean.html

http://en.wikipedia.org/wiki/8位u clean


你问的是两个不同的问题。

  • 问:HTTP 8位是否干净?

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

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

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

    base64用于在HTML中嵌入图像。

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

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


    RFC2616S摘要声明:

    A feature of HTTP is the typing and negotiation of data representation, allowing systems to be built independently of the data being transferred.

    HTTP总是以纯文本的头开始,并且在此头中指定了内容类型。只要发送方和接收方同意此内容类型,就可以进行任何操作。

    HTTP依赖于可靠的(识别Wordplay)传输层,如TCP。HTTPS只为传输层添加安全性(或者在传输层和HTTP之间,不确定这一点)。

    所以是的,HTTP(S)是8位干净的。

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

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


    In the context of web applications, why are images saved as Base64?
    There is a 33% overhead associated with being 8 bit clean.

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

    由于在ASCII中没有足够的可打印字符来表示所有的8位值(它有绝对值并且不依赖于编码本身),所以需要"去掉这些位",Base-64保持足够高的数字以使字节能够表示为可打印字符。

    这是33%的开销,因为表示可打印范围之外字符的字节值必须转换为在ASCII表中可打印的值;Base-64允许这样做(您也可以使用过去常见的带引号的可打印文件,例如,使用usenet、email等)。

    I'm thinking about writing another encoding type to remove the overhead.

    祝你好运:-


    与查询相关

    • HTTP 8位是否干净?

    HTTP协议并不是一个完整的8位干净协议。

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

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

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

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

    • 页眉

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

    例如,当作为查询参数或头文件的一部分发送签名时(这是cdn采用的签名URL技术),必须对二进制信息的签名进行编码,以保留其二进制值。