<blockquote>
<p>If someone could suggest me an alternative compression algorithm I would be equally happy.</p>
</blockquote>
<p>总是有好的旧deflate,一个更常见的LZ压缩家族成员。<a href="http://github.com/dankogai/js-deflate" rel="nofollow noreferrer">JavaScript implementation</a>。<a href="https://stackoverflow.com/questions/1089662/python-inflate-and-deflate-implementations">How to handle raw deflate content with Python's zlib module</a>。在</p>
<p>在相对较慢的客户端代码中,压缩提交数据会带来大量开销,而且提交将从中获得的原始字节并非易事。在</p>
<blockquote>
<p>do they Gzip GET parameters within a request?</p>
</blockquote>
<p>GET form submissions中的查询字符串本质上必须很短,否则将超出浏览器或服务器的URL长度限制。压缩这么小的东西是没有意义的。如果你有很多数据,它需要以POST形式。在</p>
<p>即使在POST表单中,默认的<code>enctype</code>是<code>application/x-www-form-urlencoded</code>,这意味着大部分字节将被编码为<code>%nn</code>序列。这将使表单提交膨胀,可能超出原始未压缩的大小。要提交原始字节,必须使用<code>enctype="multipart/form-data"</code>格式。在</p>
<p>即使这样,你也会遇到编码问题。JS字符串是Unicode而不是字节,它将使用包含表单的页面的编码进行编码。这通常应该是UTF-8,但是实际上不能通过编码生成任意的字节序列来上传,因为许多字节序列在UTF-8中是无效的。您可以通过将每个字节作为一个编码单元编码为UTF-8来获得unicode中的字节,但这会使压缩字节膨胀50%(因为超过<code>0x80</code>的一半代码单元将编码为两个UTF-8字节)。在</p>
<p>理论上,如果您不介意失去适当的国际化支持,您可以将页面作为ISO-8859-1提供,并使用<code>escape/encodeURIComponent</code>习惯用法在UTF-8和ISO-8859-1之间进行转换以获得输出。但这行不通,因为浏览器撒谎,实际上使用Windows代码页1252对标记为ISO-8859-1的内容进行编码/解码。你可以在每一个字节的编码中使用更多的字符。在</p>
<p>您可以通过使用base64之类的方法来避免编码问题,但是,同样地,您有更多的手动编码性能开销和33%的膨胀。在</p>
<p>总之,所有的方法都是不好的;我不认为你能从中得到多少有用的东西。在</p>