【发布时间】:2010-03-07 06:55:27
【问题描述】:
我听说浏览器如何从服务器接收 gzip 压缩的页面。他们还可以压缩发送到服务器的表单数据吗?如果可能的话,我将如何在服务器上解压缩这些数据?
我正在使用 AppEngine 的 webapp 模块,但一般的解释/指向教程的指针就足够了。我做了一些谷歌搜索无济于事。
【问题讨论】:
标签: python google-app-engine forms gzip
我听说浏览器如何从服务器接收 gzip 压缩的页面。他们还可以压缩发送到服务器的表单数据吗?如果可能的话,我将如何在服务器上解压缩这些数据?
我正在使用 AppEngine 的 webapp 模块,但一般的解释/指向教程的指针就足够了。我做了一些谷歌搜索无济于事。
【问题讨论】:
标签: python google-app-engine forms gzip
简短回答:不。
【讨论】:
我认为浏览器可能可以将压缩后的表单数据发送到服务器。我不知道这样做是否普遍。
发件人需要确保Content-Encoding: 标头的值包含gzip。然后需要使用 gzip 编码对消息的正文进行编码,并且可以使用 gzip.GzipFile 类在 python 中压缩/解压缩 gzip 后的数据。我不知道 gzip 模块在 appengine 上是否可用——如果它需要 C 模块实现,那么它可能不会(不确定是否需要)。
就解码而言,在您的应用引擎程序获得任何输入之前运行的网络机器可能会对 gzip 压缩的内容进行解码。我几乎没有使用 appengine 做过任何工作,所以我不熟悉那种细节。不过,您可能不必在服务器端担心它……它会自动得到处理。你必须检查一下。
查看RFC2616 可能会有用,尤其是Accept-Encoding 和Content-Encoding 的部分。
【讨论】:
简答:
不,大多数浏览器不会为客户端请求压缩表单数据。
长答案:
是的,所有浏览器都允许客户端发送压缩的表单数据。但是由于浏览器不会为我们压缩数据,所以我们必须自己压缩。
Gzip 使用 DEFLATE 算法,它是publicly available 并且可以免费使用。可以做的是在客户端使用 JavaScript 压缩表单数据(如果您不想自己编写,请下载JS Gzip library),然后通过 GET、POST 或PUT 使用XMLHttpRequest。
如果您可以控制您的网络服务器,您可以简单地抓取数据并解压缩。如果你无法控制,你将不得不遵循任何既定的政策。例如,某些 Web 服务器可能要求您设置特定的 Content-Type,而其他 Web 服务器可能根本不支持。
最后请注意,如果您的资源是已压缩的文件,则 gzip 压缩它可能没有任何优势。但是,如果您的资源是巨大的未压缩数据(例如 80000 个字符的论坛帖子),则优势是巨大的。
【讨论】: