由于HTTP和HTTP已经8 bit clean,因此无需使用8位干净编码系统(例如Base64)。我们可以用8位编码。
是否有任何继承限制? I.E.什么可以用8位或256个排列表示什么?
我注意到Unicode,UTF - 8字节(1字节表示)只能表示128个排列,b.c。 MSB必须为0表示必须使用1字节表示。所以这不可能。
创建一个专门用于在8位清洁系统中传输数据的8位系统有什么限制?
唯一的要求是必须使用256个符号可视地表示数据。
答案 0 :(得分:2)
8位清理的HTTP(或任何协议/系统)并不意味着您可以在协议中的任何位置使用任何8位值。这意味着只有协议或系统能够在正确的情况下处理8位编码。
例如,HTTP使用回车符+换行符(十六进制值0D0A
)来分隔标题字段和邮件正文,因此您无法在标题中的任何位置使用这些值。此外,标题和主体可能基于其中包含的数据类型而对其字符编码具有限制。如果HTTP Content-Type设置为text/html; charset=utf-8
,则会为HTML标记保留正文中的字符<
(十六进制值3C
)。 HTTP主体可能是8位干净,但这并不意味着您可以将任何8位内容放入其中,您仍然必须符合UTF-8(或其他一些编码)并遵守内容规则HTML强加的。
Base64的目的是编码任意二进制数据,以便在其他编码方案中使用,其中[A-Za-z0-9+/]
以外的字符保留用于特殊用途,或者完全无效(例如HTML内部或URL查询字符串) )。您不能仅使用完整的8位编码方案替换Base64,因为8位方案在需要Base64的情况下无效。即使您使用的协议本身是8位清理也是如此。
简而言之,您使用的二进制编码方案不仅仅依赖于8位清理而不是8位清理。这取决于您使用内部编码的协议,协议控制字符的内容,以及保留这些字符的情况。
<强>更新强>
如果你真正想做的就是在HTTP响应中返回原始二进制文件,只需将HTTP Content-Type设置为application/octet-stream
即可。这将允许您在HTTP主体中返回任意二进制文件而无需编码。