代码之家  ›  专栏  ›  技术社区  ›  int3

发送gzip表单数据

  •  4
  • int3  · 技术社区  · 15 年前

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

    我正在使用appengine的webapp模块,但是对教程的一般解释/指针就足够了。我搜了几次都没用。

    3 回复  |  直到 12 年前
        1
  •  4
  •   Community CDub    8 年前
        2
  •  4
  •   Matt Anderson    15 年前

    我认为浏览器可能可以将gzip格式的数据发送到服务器。我不知道这样做是否普遍。

    发件人需要确保 Content-Encoding: 包含值的头 gzip . 然后,消息的主体将需要使用gzip编码进行编码,您可以使用 gzip.GzipFile 班级。我不知道 GZIP 模块在appengine上可用——如果它需要一个c-module实现,那么它可能不会(不确定它是否需要)。

    就解码而言,在app engine程序获得任何输入之前运行的web机器可能会对gzip内容进行解码。我几乎没有和appengine合作过,所以我不熟悉那种细节。不过,有可能的是,你不必在服务器端担心它……它只是自动得到处理。你得检查一下。

    看看可能有用 RFC2616 ,尤其是 Accept-Encoding Content-Encoding .

        3
  •  4
  •   Community CDub    8 年前

    简短回答:

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

    长答案:

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

    gzip使用deflate算法,即 publicly available 免费使用。可以做的是使用javascript压缩客户端的表单数据(下载 JS Gzip library 如果您不想自己编写一个),则通过get、post或put将压缩数据发送到服务器 XMLHttpRequest

    如果你控制了你的web服务器,你可以简单地获取数据并解压缩。如果你不在控制之中,你将不得不遵循任何既定的政策。例如,某些Web服务器可能要求您设置特定的内容类型,而其他服务器可能根本不支持它。

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