【问题标题】:Sending gzipped form data发送压缩后的表单数据
【发布时间】:2010-03-07 06:55:27
【问题描述】:

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

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

【问题讨论】:

    标签: python google-app-engine forms gzip


    【解决方案1】:

    简短回答:不。

    见:Why can't browser send gzip request?

    【讨论】:

      【解决方案2】:

      我认为浏览器可能可以将压缩后的表单数据发送到服务器。我不知道这样做是否普遍。

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

      就解码而言,在您的应用引擎程序获得任何输入之前运行的网络机器可能会对 gzip 压缩的内容进行解码。我几乎没有使用 appengine 做过任何工作,所以我不熟悉那种细节。不过,您可能不必在服务器端担心它……它会自动得到处理。你必须检查一下。

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

      【讨论】:

      • AIUI,RFC2616 是关于服务器到客户端的通信。我试图自己回答这个问题(我有一个应用程序,客户端向服务器发送大量高度可压缩的数据),但没有得到令人满意的答案。 JS 中有 LZW 实现,但它们看起来很慢。我根本不知道有什么方法可以处理这个问题。 AFAICT 浏览器仅实现 gzip 解码
      • HTTP RFC 涵盖了两个方向。 Content-Encoding 是允许客户端提供的标头,但我不知道有任何客户端实际尝试 gzip 发布数据。不过,您可以尝试查看 App Engine 是否支持它 - RFC 说:“如果请求消息中实体的内容编码不被源服务器接受,则服务器应该以状态代码 415 进行响应(不支持的媒体类型)。”
      【解决方案3】:

      简答:

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

      长答案:

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

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

      如果您可以控制您的网络服务器,您可以简单地抓取数据并解压缩。如果你无法控制,你将不得不遵循任何既定的政策。例如,某些 Web 服务器可能要求您设置特定的 Content-Type,而其他 Web 服务器可能根本不支持。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2015-10-21
        • 1970-01-01
        • 2012-10-13
        • 2015-02-11
        • 1970-01-01
        相关资源
        最近更新 更多