我使用openresty作为代理服务器,这可能会改变来自上游的响应。指令header_filter_by_lua *在body_filter_by_lua *之前执行。但是我在body_filter_by_lua *中更改了Content-length,并且当时已发送了标题。
那么如何在body_filter_by_lua中更改上游响应时设置正确的Content-length *?
谢谢!
答案 0 :(得分:1)
来自https://github.com/openresty/lua-nginx-module#body_filter_by_lua:
当Lua代码可能更改响应正文的长度时,则需要始终清除标头过滤器中的Content-Length响应标头(如果有)以强制执行流输出,如
location /foo {
# fastcgi_pass/proxy_pass/...
header_filter_by_lua_block { ngx.header.content_length = nil }
body_filter_by_lua 'ngx.arg[1] = string.len(ngx.arg[1]) .. "\\n"';
}
我希望在这种情况下nginx会使用http://greenbytes.de/tech/webdav/rfc2616.html#chunked.transfer.encoding(没有测试)