如果有人可以建议我一种替代压缩算法,我会同样高兴。
总是有很好的旧放气,LZ 压缩系列中更常见的成员。JavaScript 实现。如何使用 Python 的 zlib 模块处理原始的 deflate 内容。
在相对较慢的客户端代码中压缩提交数据会产生大量开销,并且提交您将从中获得的原始字节并非易事。
他们在请求中使用 Gzip GET 参数吗?
查询字符串中的 GET 表单提交本质上必须相当短,否则您将超出浏览器或服务器 URL 长度限制。压缩这么小的东西是没有意义的。如果您有大量数据,则需要以 POST 形式发送。
即使在 POST 形式中,默认值enctype
也是application/x-www-form-urlencoded
,这意味着大多数字节将被编码为%nn
序列。这将使您的表单提交膨胀,可能超出原始未压缩的大小。要提交原始字节,您必须使用enctype="multipart/form-data"
表单。
即使那样,您也会遇到编码问题。JS 字符串是 Unicode 而不是字节,将使用包含表单的页面的编码进行编码。这通常应该是 UTF-8,但是您实际上不能通过对其进行编码来生成用于上传的任意字节序列,因为许多字节序列在 UTF-8 中无效。您可以通过将每个字节编码为 UTF-8 的代码单元来获得 Unicode 中的字节,但这会使您的压缩字节膨胀 50%(因为超过 的一半代码单元0x80
将编码为两个 UTF-8 字节) .
从理论上讲,如果您不介意失去适当的国际化支持,您可以将页面作为 ISO-8859-1 提供,并使用该escape/encodeURIComponent
惯用语在 UTF-8 和 ISO-8859-1 之间进行转换以进行输出。但这行不通,因为浏览器撒谎并且实际上使用 Windows 代码页 1252 来编码/解码标记为 ISO-8859-1 的内容。您可以使用另一种将每个字节映射到一个字符的编码,但这会产生更多的手动编码开销,并且会进一步限制您可以在页面中使用的字符。
您可以通过使用 base64 之类的东西来避免编码问题,但同样,您会获得更多的手动编码性能开销和 33% 的膨胀。
总而言之,所有方法都不好。我不认为你会从中得到多大用处。