当在 Apache2 中使用 mod_deflate 时,Apache 将对 gzip 内容进行分块,设置 Transfer-encoding: chunked 标头。虽然这会加快下载时间,但我无法显示进度条。
如果我自己在 PHP 中处理压缩,我可以首先将其完全 gzip 并设置 Content-length 标头,以便我可以向用户显示进度条。
是否有任何设置可以更改 Apache 的默认行为,并让 Apache 设置内容长度标头而不是对响应进行分块,以便我不必自己处理压缩?
你也许可以玩发送缓冲区大小获得一个足够大的值以将您的响应包含在一个块中。
Then 分块内容是 HTTP/1.1 协议的一部分,您可以强制 HTTP/1.0 响应(因此不会分块:“服务器不得向 HTTP/1.0 客户端发送传输编码。”)通过设置力响应-1.0在你的 apache 配置中。但PHP 破坏了这个设置,这是 PHP 的一个长期已知的错误,有一个解决方法.
我们可以尝试修改客户端的请求,使用标头来防止分块内容,但 w3c 说:“所有 HTTP/1.1 应用程序必须能够接收和解码“分块”传输编码”,所以我认为没有像“Accept”这样的标头可以阻止服务器对内容进行分块。但是,您可以尝试在 HTTP/1.0 中设置您的请求,它实际上并不是请求的标头,而是第一行,当然应该可以使用 jQuery。
最后一件事,HTTP/1.0 缺少一件大事,“主机”标头不是强制性的,如果您使用基于名称的虚拟主机,请验证 HTTP/1.0 中的请求是否仍在使用“主机”标头。
edit:通过使用解决方法中引用的技术,您可以看到可以在 PHP 代码中调整 Apache env。这可用于仅对您的特殊 gzip 压缩内容强制使用 1.0 模式,并且您应该使用它来防止在 HTTP/1.0 中完成应用程序(或使用请求模式为您的 gzip 请求设置 HTTP/1.0)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)