发送压缩的表单数据

4

我听说浏览器可以从服务器接收gzipped页面,那么它们是否也可以gzip表单数据并发送到服务器?如果可能的话,我该如何在服务器上解压这些数据?

我正在使用AppEngine的webapp模块,但一般的解释/教程指针就足够了。我已经搜索过了,但没有结果。

3个回答

4
我认为浏览器可能可以将gzipped表单数据发送到服务器。我不知道这是否常见。
发送者需要确保具有包含gzip的值的Content-Encoding:头。然后,消息正文需要使用gzip编码,可以使用gzip.GzipFile类在python中压缩/解压缩gzipped数据。我不知道appengine上是否可用gzip模块 - 如果它需要C模块实现,则可能不会(不确定是否需要)。
至于解码,运行在您的应用程序引擎程序之前的Web机制可能会解码gzipped内容。我几乎没有使用过appengine,所以对这种细节不熟悉。但是,可能您只需在服务器端不必担心它...它会自动处理。您必须检查一下。
查看RFC2616的Accept-EncodingContent-Encoding部分可能很有用。

据我所知,RFC2616是关于服务器到客户端通信的。我曾经试图回答这个问题(我有一个应用程序,客户端向服务器发送大量高度可压缩的数据),但没有得到令人满意的答案。JS中有LZW实现,但它们似乎非常慢。我不知道有没有JS之外的处理方式;据我所知,浏览器只实现了gzip 解码 - Sai
3
HTTP RFC 包含了请求和响应两个方向的内容。Content-Encoding 是客户端可以提供的合法头部之一,但我不知道是否有任何客户端尝试对 POST 数据进行 gzip 压缩。您可以尝试一下来查看 App Engine 是否支持,因为 RFC 中写道:“如果请求消息中的实体的内容编码对源服务器来说是不可接受的,则服务器应该使用状态码 415(不支持的媒体类型)进行响应”。 - Nick Johnson

4

4

简短回答:

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

详细回答:

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

Gzip使用DEFLATE算法,该算法是公开可用且免费使用的。可以在客户端使用JavaScript对表单数据进行压缩(如果您不想自己编写,可以下载一个JS Gzip库),然后使用XMLHttpRequest通过GET、POST或PUT发送压缩后的数据到服务器。

如果您控制您的Web服务器,则可以简单地获取数据并解压缩它。如果您没有控制权,则必须遵循设置的任何策略。例如,某些Web服务器可能需要您设置特定的Content-Type,而其他服务器可能根本不支持。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接