Hi,
建议下次发邮件直接贴代码, 因为图片不好展现代码
openresty输出响应内容时并不是完整一个body一次性返回的, 可以想象成是一个data output stream
这里的body_filter_by_lua并不是被调用一次, 这个原语有两个入参, ngx.arg[1]是body片断, ngx.arg[2]标识响应结束
在你给的示例里当最后一次调用到body_filter_by_lua时, ngx.arg[1]是空字符串, ngx.arg[2]是true
另外这个代码片断写得有问题, 如果输出太大, 并没有把最终的resp_body控制在1000个字符以内, 如下是我改过的示例
set $resp_body "";
body_filter_by_lua '
local maxlen = 1000
ngx.ctx.buffered = ngx.ctx.buffered or ""
if #ngx.ctx.buffered < maxlen then
ngx.ctx.buffered = ngx.ctx.buffered .. string.sub(ngx.arg[1], 1, maxlen - #ngx.ctx.buffered)
end
if ngx.arg[2] then
ngx.var.resp_body = ngx.ctx.buffered
end
';
On Saturday, March 19, 2016 at 5:19:25 PM UTC+8, she...@gmail.com wrote:
初学 openresty ,在网上看到一段 记录response 报文体的配置,有点看不懂,请大家帮助一下![]()
不清楚,黑框中的写法的作用是什么,尤其那个ngx.ctx.buffered 。如果我改成 ngx.ctx.buffered = "" .. resp_body 最后值为空。