发送gzip压缩表单数据

时间:2010-03-07 06:55:27

标签: python google-app-engine forms gzip

我听说过浏览器如何从服务器接收gzip压缩页面。他们是否也可以gzip发送到服务器的表单数据?如果可能,我将如何在服务器上解压缩这些数据?

我正在使用AppEngine的webapp模块,但对教程的一般解释/指示就足够了。我做了一些谷歌搜索无济于事。

3 个答案:

答案 0 :(得分:4)

我认为浏览器可能会将gzip压缩表单数据发送到服务器。我不知道这样做是否常见。

发件人需要确保Content-Encoding:标头的值包含gzip。然后需要使用gzip编码对消息体进行编码,并且可以使用gzip.GzipFile类在python中压缩/解压缩gzip压缩数据。我不知道是否可以在appengine上使用gzip模块 - 如果它需要C模块实现,那么它可能不会(不确定它是否存在)。

就解码而言,在你的app-engine程序获得任何输入之前运行的web机器可能会解码gzip压缩的内容。我几乎没有做过appengine的工作,所以我不熟悉那种细节。但是,您可以在服务器端无需担心它...它只是自动处理。你必须检查。

查看RFC2616可能会有用,尤其是Accept-EncodingContent-Encoding的部分。

答案 1 :(得分:4)

简短回答:不。

请参阅:Why can't browser send gzip request?

答案 2 :(得分:4)

简答:

不,大多数浏览器都不会压缩客户端请求的表单数据。

答案很长:

是的,所有浏览器都允许客户端发送压缩的表单数据。但由于浏览器不会为我们压缩数据,我们必须自己压缩它。

Gzip使用DEFLATE算法,publicly available并且可以免费使用。可以做的是使用JavaScript压缩客户端的表单数据(如果您不想自己编写,请下载JS Gzip library),然后通过GET,POST将压缩数据发送到服务器,或使用XMLHttpRequest进行PUT。

如果您可以控制Web服务器,则只需抓取数据并解压缩即可。如果您无法控制,则必须遵循所设置的任何策略。例如,某些Web服务器可能要求您设置特定的Content-Type,而其他Web服务器可能根本不支持它。

最后请注意,如果您的资源是已经压缩的文件,则对其进行压缩可能没有任何优势。但是,如果您的资源是巨大的未压缩数据(例如,80000个字符的论坛帖子),那么优势是巨大的。