我看到很多关于为服务器响应启用 http 压缩的信息,但是对于传入的请求呢?浏览器在将大型帖子发送到服务器之前压缩它们是否有意义?
另一个例子是我们使用的 REST Web 服务。我们必须频繁发送带有大型 XML 文件 (10+ MB) 的 PUT 请求,并且肯定会在双方看到一些带宽/速度优势。
那么这是在服务器端解决的问题,还是每个 Web 应用程序都必须单独处理?
我看到很多关于为服务器响应启用 http 压缩的信息,但是对于传入的请求呢?浏览器在将大型帖子发送到服务器之前压缩它们是否有意义?
另一个例子是我们使用的 REST Web 服务。我们必须频繁发送带有大型 XML 文件 (10+ MB) 的 PUT 请求,并且肯定会在双方看到一些带宽/速度优势。
那么这是在服务器端解决的问题,还是每个 Web 应用程序都必须单独处理?
要将
PUT
数据压缩到服务器,您必须压缩请求正文并设置Content-Encoding: gzip
标头。标头本身必须是未压缩的。它记录在mod_deflate:描述它的文章在这里:
另外,浏览器可以通过在此处
Accept-Encoding
设置标头来请求压缩服务器响应内容:这会将压缩数据返回给浏览器。
回答关于压缩请求的部分,而不是响应:是的,这是可能的,即使它似乎没有被广泛使用。客户端应用程序需要设置适当的内容编码标头。至于服务器端应用程序,有两种选择:
该应用程序支持自行重新膨胀请求正文。一个可以做到这一点的示例库是 phpxmlrpc。
网络服务器在将响应主体传递给应用程序之前对其进行膨胀。这可以使用 Apache 的 mod_deflate 过滤器并设置一个 inputFilter
我所知道的任何浏览器都不是原生的,你必须找到一个可以为你做的插件。您基本上必须设置内容编码 HTTP 标头,以让服务器知道请求是如何进入的。当然,服务器需要能够处理该编码。
下面的代码是设置自定义标头并在 api 调用中将此标头作为 http 选项传递:
之后,当您调用 API 来获取数据时,使用 url 传递选项:
这是不允许的。根据 HTTP 规范 ( RFC 2616 ),
Content-Encoding
它不是可能的请求标头字段之一,因此无法压缩请求实体主体,因为没有合法的方法让服务器知道这已经发生。请求正文的任何压缩仅作为非标准扩展完成。