Hello! 2014-02-26 4:54 GMT-08:00 coderesty: > 谁能解释一下ngx.location.capture的返回值的res.truncated, 代表什么意思呀? > 是不是如果res.truncated为true, 代表本次接收数据不完整, 出错啦, 是不是. 是。 -agentzh
Hello! 2014-06-15 7:14 GMT-07:00 aCayF: > 翻出个老贴问一下,引起这个truncated的原因,我猜测是不是可能有如下几个: > > 1.proxy_buffering设置为了off,导致当只接收了上游的一部分数据时,这部分数据就被传给下游了,即函数返回了 > 2.proxy_buffering设置为了on,但是由于上游的数据过大,导致一部分数据被缓存到了临时文件里,使得函数返回时,res.body里只有缓存在内存的数据 > 你说的这两种情况都属正常,所以都不会导致 truncated 标志被设置。具体来说: 1. ngx.location.capture 不会在只接受了部分请求体数据时立即返回(除非上游连接出错),所以第一种情况不成立。 2. 同时它也要求内容处理程序在调用输出过滤器链时总是使用内存数据缓冲区(通过设置 r->filter_need_in_memory 这个标志),所以即使 ngx_proxy 把数据先缓冲到了临时文件,它也会在把各个数据块传递到 ngx_lua 的 capturing 过滤器之前先把从文件读到内存中来。因此你说的第二种情况也不成立。 只有当上游连接出错(比如请求体数据读取超时,或者在发送请求体数据的当中突然断开连接)时,才会出现 truncated 的情况。 Regards, -agentzh
Hello! 2014-06-15 7:14 GMT-07:00 aCayF: > 翻出个老贴问一下,引起这个truncated的原因,我猜测是不是可能有如下几个: > > 1.proxy_buffering设置为了off,导致当只接收了上游的一部分数据时,这部分数据就被传给下游了,即函数返回了 > 2.proxy_buffering设置为了on,但是由于上游的数据过大,导致一部分数据被缓存到了临时文件里,使得函数返回时,res.body里只有缓存在内存的数据 > 你说的这两种情况都属正常,所以都不会导致 truncated 标志被设置。具体来说: 1. ngx.location.capture 不会在只接受了部分请求体数据时立即返回(除非上游连接出错),所以第一种情况不成立。 2. 同时它也要求内容处理程序在调用输出过滤器链时总是使用内存数据缓冲区(通过设置 r->filter_need_in_memory 这个标志),所以即使 ngx_proxy 把数据先缓冲到了临时文件,它也会在把各个数据块传递到 ngx_lua 的 capturing 过滤器之前先把从文件读到内存中来。因此你说的第二种情况也不成立。 只有当上游连接出错(比如请求体数据读取超时,或者在发送请求体数据的当中突然断开连接)时,才会出现 truncated 的情况。 Regards, -agentzh --