Hello!
2012/7/12 刘太华 <de...@gmail.com>:
> sorry,经过测试发现当输出的content-type如果被设置在gzip_types内的,也就是会被压缩,这时候无法通过ngx.header.content_length设定大小,始终都是chunked.
ngx_gzip 输出过滤器会自动清除 content-length
响应头,因为它无法在没看到所有的响应体数据的时候(即发送响应头的时候)预知压缩后的总大小。所以这并不是说你在 Lua 里面设置
ngx.header.content_length 没有成功,而是设置成功后被 ngx_gzip 模块的输出过滤器又给清除了。
> 在nginx官方一个文档里找到这句:Also note that the Content-Length header is not set when
> using either version. Keepalives will therefore be impossible with version
> 1.0, while for 1.1 it is handled by chunked transfers.
>
> 应该说明的就是此意思吧
>
这段英文说的完全是另一件事情,和 gzip 一点关系都没有。这段话是说 HTTP 1.0 keepalive 需要
content-length 响应头才能工作,因为 HTTP 1.0 协议还不支持 chunked 编码,也没有其他的流式输出格式。所以当
content-length 响应头不存在时,http 1.0 响应就以连接断开作为响应体数据的末尾,于是自然不可能再支持
keepalive 特性了。
Regards,
-agentzh