在Apache2中使用mod_deflate时,Apache将对压缩的内容进行分块,并设置Transfer-encoding:chunked header 。虽然这样可以缩短下载时间,但无法显示进度条。

如果我自己使用PHP处理压缩,则可以先将其完全gzip压缩,然后设置Content-length header ,以便向用户显示进度条。

是否有任何设置可以更改Apache的默认行为,并让Apache设置Content-length header 而不是对响应进行分块,这样我就不必自己处理压缩了?

最佳答案

您也许可以使用sendBufferSize获得一个足够大的值,以将您的响应包含在一个块中。

然后chunked content是HTTP / 1.1协议(protocol)的一部分,您可以通过设置 force-来强制HTTP / 1.0响应(因此不要分块:“服务器不得将传输代码发送到HTTP / 1.0客户端。”)。您的apache配置中的response-1.0 。但是 PHP破坏了此设置,这是一个众所周知的PHP错误,有一个workaround

我们可以尝试在 header 上使用防止分块内容的 header 来修改客户端的请求,但是w3c表示:“所有HTTP / 1.1应用程序都必须能够接收和解码”分块“的传输编码”,所以我不认为没有像“Accept”之类的 header 会阻止服务器对内容进行分块。但是,您可以尝试在HTTP / 1.0中设置您的请求,它实际上不是请求的 header ,而是第一行,当然应该可以使用jQuery。

最后,HTTP / 1.0缺少一件大事,“host” header 不是必需的,如果您使用基于名称的虚拟主机,请验证HTTP / 1.0中的请求仍在使用“host” header 。

编辑:通过使用变通办法中引用的技术,您可以看到可以在PHP代码中调整Apache env。这可用于仅对特殊的压缩内容强制使用1.0模式,并且应该使用它来防止您在HTTP / 1.0中完成应用程序(或使用请求模式为gzip请求设置HTTP / 1.0)。

关于apache - 防止Apache对压缩的内容进行分块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4538880/

10-16 16:08
查看更多