![如果我在 apache 上使用 mod_deflate 或 gzip,HTTP PUT 请求是否会被压缩?](https://linux22.com/image/506214/%E5%A6%82%E6%9E%9C%E6%88%91%E5%9C%A8%20apache%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20mod_deflate%20%E6%88%96%20gzip%EF%BC%8CHTTP%20PUT%20%E8%AF%B7%E6%B1%82%E6%98%AF%E5%90%A6%E4%BC%9A%E8%A2%AB%E5%8E%8B%E7%BC%A9%EF%BC%9F.png)
我使用 HTTP PUT 请求在服务器上接收 xml 文件。如果我的 Apache 配置了 mod_deflate,它在传输过程中会被压缩吗?我如何验证它是否被压缩?如果没有,我该如何强制压缩?
谢谢!
答案1
根据我的上一个答案:
浏览器通过设置 Accept-Encoding 标头来请求压缩内容这里
GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0
这将向浏览器返回压缩数据。但是,要将数据压缩后发送到服务器,您必须压缩整个请求,包括标头。它记录在mod_deflate:
mod_deflate 模块还提供了用于解压 gzip 压缩请求主体的过滤器。为了激活此功能,您必须使用 SetInputFilter 或 AddInputFilter 将 DEFLATE 过滤器插入到输入过滤器链中。
...
现在,如果请求包含 Content-Encoding: gzip 标头,则请求主体将自动解压缩。很少有浏览器能够对请求主体进行 gzip 压缩。但是,一些特殊应用程序实际上支持请求压缩,例如一些 WebDAV 客户端。
有一篇描述它的文章是这里:
那么该怎么做呢?下面是来自 mod_deflate 源代码的一段简介:只对主请求有效/不处理子请求。这意味着如果我们选择使用 gzip 压缩,则必须对整个请求主体进行压缩,例如在多部分请求中,不可能只压缩包含文件的部分。
答案2
当mod_deflate
Apache发送数据时,而不是接收时。
问题在于,浏览器在了解 Web 服务器支持什么之前就将数据发送到 Web 服务器,因此,它无法压缩数据,也不知道服务器是否能够处理它。
如果您确实需要较低的带宽使用率,您应该在发送 xml 文件之前对其进行压缩,然后在应用程序中对其进行解压缩。