it-swarm.cn

是否可以为请求启用http压缩?

我看到了许多有关为服务器响应启用http压缩的信息,但对于传入请求则有很多信息。浏览器在将大尺寸帖子发送到服务器之前压缩它们是否有意义?

另一个示例是我们使用的REST Web服务。我们必须频繁发送带有大型XML文件(10+ MB)的PUT请求,并且肯定会在双方的带宽/速度上受益。

那么这是服务器端解决的问题还是每个Web应用程序都必须单独处理?

35
Mike L

要将PUT数据压缩到服务器,您必须压缩请求正文并设置Content-Encoding: gzip标头。标头本身必须未压缩。它记录在 mod_deflate 中:

Mod_deflate模块还提供了一个用于解压缩gzip压缩请求主体的过滤器。为了激活此功能,您必须使用SetInputFilter或AddInputFilter将DEFLATE过滤器插入到输入过滤器链中。

...

现在,如果请求包含Content-Encoding:gzip标头,则正文将自动解压缩。很少有浏览器能够gzip请求正文。但是,某些特殊应用程序实际上确实支持请求压缩,例如某些WebDAV客户端。

描述它的文章是 这里

你是怎么做到的?这也是来自mod_deflate源代码的内容:仅适用于主请求/无子请求。这意味着,如果我们选择使用此请求,则必须对请求的整个主体进行gzip压缩,例如,在多部分请求中,不可能仅压缩包含文件的部分。

另外,浏览器可以通过按 此处 设置Accept-Encoding标头来请求压缩服务器响应内容。

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

这会将压缩的数据返回到浏览器。

30
Andy

回答有关压缩请求而不是响应的部分:是的,即使它似乎没有被广泛使用,也是有可能的。客户端应用程序需要设置适当的内容编码标头。至于服务器端应用程序,有2种选择:

  1. 该应用程序本身支持对请求主体进行充气。可以做到这一点的示例库是phpxmlrpc。

  2. 在将响应主体传递给应用程序之前,Web服务器会对其进行膨胀。使用f.e. Apache的mod_deflate过滤器并设置inputFilter

4
gggeek

并非来自我所知道的任何浏览器,您都必须找到一个可以为您做到的插件。基本上,您必须设置内容编码HTTP标头,以使服务器知道请求的输入方式。服务器当然需要能够处理该编码。

2
squillman

这是不允许的。根据HTTP规范( RFC 2616 ),Content-Encoding不是可能的请求标头字段之一,因此无法压缩请求实体主体,因为没有合法的方法可以让服务器知道发生了这种情况。请求正文的任何​​压缩都只能作为非标准扩展来完成。

0
Steve