发送gzip压缩表单数据

4 投票
3 回答
4931 浏览
提问于 2025-04-15 20:06

我听说浏览器可以从服务器接收经过压缩的页面(gzipped页面)。那么,浏览器发送给服务器的表单数据也能被压缩吗?如果可以的话,我该如何在服务器上解压这些数据呢?

我正在使用AppEngine的webapp模块,不过只要有个大概的解释或者一些教程的链接就可以了。我在网上搜索了一些,但没有找到有用的信息。

3 个回答

4

简短回答:

不,大多数浏览器不会自动压缩表单数据。

详细回答:

是的,所有浏览器都允许客户端发送压缩后的表单数据。但因为浏览器不会帮我们压缩数据,所以我们需要自己来做这件事。

Gzip使用的是DEFLATE算法,这个算法是公开可用且免费的。我们可以在客户端使用JavaScript来压缩表单数据(如果不想自己写代码,可以下载一个JS Gzip库),然后通过GET、POST或PUT的方式,使用XMLHttpRequest将压缩后的数据发送到服务器。

如果你能控制自己的web服务器,你可以直接获取数据并解压缩。如果你无法控制服务器,就需要遵循服务器的相关规定。例如,有些web服务器可能要求你设置特定的Content-Type,而有些则可能根本不支持压缩。

最后要注意的是,如果你的资源是一个已经压缩过的文件,那么再用Gzip压缩可能没有什么好处。但如果你的资源是一个非常大的未压缩数据(比如一个80000字符的论坛帖子),那么压缩的好处就非常明显了。

4

我觉得浏览器可能可以把压缩过的表单数据发送到服务器。不过我不太确定这样做是否很常见。

发送方需要确保在请求中包含一个 Content-Encoding: 的头信息,值要包含 gzip。然后消息的主体部分就需要用 gzip 格式进行编码。在 Python 中,可以使用 gzip.GzipFile 类来压缩和解压缩 gzip 数据。我不确定在 appengine 上是否可以使用 gzip 模块——如果它需要 C 语言模块的实现,那可能就不行(我也不太确定)。

至于解码,可能在你的 app-engine 程序接收到任何输入之前,网络系统会自动解码 gzip 格式的内容。我对 appengine 的了解几乎为零,所以不太熟悉这方面的细节。不过,有可能你在服务器端根本不需要担心这个问题……它可能会自动处理好。你需要确认一下。

查看一下 RFC2616 可能会很有帮助,特别是关于 Accept-EncodingContent-Encoding 的部分。

4

简短的回答:不可以。

详细内容请查看:为什么浏览器不能发送gzip请求?

撰写回答