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中嵌入图像。
所以,你得到了一个图像
或者,您可以决定将图像的内容嵌入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技术),必须对二进制信息的签名进行编码,以保留其二进制值。