在Apache2中使用mod_deflate时,Apache将对gzip压缩内容进行分块,设置Transfer-encoding:chunked头。虽然这会缩短下载时间,但我无法显示进度条。
如果我自己在PHP中处理压缩,我可以先完全gzip并设置Content-length标题,这样我就可以向用户显示一个进度条。
是否有任何设置可以改变Apache的默认行为,并让Apache设置内容长度标头而不是分块响应,这样我就不必自己处理压缩了?
答案 0 :(得分:1)
您可以使用sendBufferSize来获取足够大的值,以便将响应包含在一个块中。
然后chunked content是HTTP / 1.1协议的一部分,你可以强制HTTP / 1.0响应(所以不要分块:“服务器绝不能将传输编码发送到HTTP / 1.0客户端。 “)在您的apache配置中设置 force-response-1.0 。但是 PHP打破了这个设置,这是一个长期存在的PHP错误,有一个workaround。
我们可以尝试在客户端修改请求,使用标头来阻止分块内容,但w3c说:“所有HTTP / 1.1应用程序必须能够接收和解码”分块“传输编码< / strong>“,所以我认为没有像'Accept'那样的标题,这样可以阻止服务器分块内容。然而,您可以尝试在HTTP / 1.0中设置您的请求,它实际上不是请求的标头,它是第一行,当然应该可以使用jQuery。
最后,HTTP / 1.0缺少一件大事,'主机'标头不是强制性的,如果您使用基于名称的虚拟主机,请验证HTTP / 1.0中的请求是否仍然使用'host'标头。
编辑:通过使用变通方法中引用的技术,您可以看到您可以在PHP代码中调整Apache env。这可以用于强制1.0模式仅适用于您的特殊gzip压缩内容,您应该使用它来防止您在HTTP / 1.0中完成应用程序(或使用请求模式为您的gzip请求设置HTTP / 1.0)。 / p>