<转>nginx取消chunk

在开发过程使用nginx作为web服务器,使用android提交请求后,服务器端使用php响应处理,并返回json数据,由于数据量较大,导致android接收数据不全,但是使用浏览器访问响应数据完整。

 

使用 Wireshark查看http头信息发现,请求不是一次完成,是多次请求后返回多个数据包,并且有的数据包中的数据出现异常的标识,其传输方式均为 chunked(“Transfer-Encoding: chunked”)。查阅资料得知头部的 16 进制数(chunk 长度)、尾部的 0(chunk 终结)正是 chunked 传输方式的消息标识。

Apache 的 respone 只有一个 chunk,而 nginx 的 respone 则分为 多 个 chunks,其中第 1 个 chunk 的头部、第 4 个 chunk 的尾部出现的额外字节正是 Apache 的 respone 中原始的 chunk 标识。

调查发现,原来对于http 1.1的情况下,对于响应模拟http请求,nginx解析动态数据使用chunk模式进行解析,即一边解析数据一边响应请求,对于浏览器使用的是gzip模式,所以无此情况。

猜测可能是chunk数据块的大小导致了数据丢失,暂时不知道如何设置chunk的大小,于是采用关闭chunk的方法,在 nginx 配置文件中相应网站的 location 段中加一行“chunked_transfer_encoding off;”。

该方法可能会导致客户端访问时候响应速度有变化。

posted on 2016-02-27 00:10  hahahahahai12  阅读(1638)  评论(0)    收藏  举报

导航