如何在 openresty 中更改 body_filter_by_lua* 中的内容长度
How to change Content-length in body_filter_by_lua* in openresty
我正在使用 openresty 作为代理服务器,这可能会改变来自上游的响应。指令 header_filter_by_lua* 在 body_filter_by_lua* 之前执行。但是我在body_filter_by_lua*里面改了Content-length,那个时候headers已经发完了。
那么在 body_filter_by_lua* 中更改来自上游的响应时如何设置正确的 Content-length?
谢谢!
来自https://github.com/openresty/lua-nginx-module#body_filter_by_lua:
当Lua代码可能会改变响应body的长度时,则需要始终清除Content-Length响应header(如果有的话)在 header 过滤器中强制执行流式输出,如
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(未测试)
我正在使用 openresty 作为代理服务器,这可能会改变来自上游的响应。指令 header_filter_by_lua* 在 body_filter_by_lua* 之前执行。但是我在body_filter_by_lua*里面改了Content-length,那个时候headers已经发完了。
那么在 body_filter_by_lua* 中更改来自上游的响应时如何设置正确的 Content-length?
谢谢!
来自https://github.com/openresty/lua-nginx-module#body_filter_by_lua:
当Lua代码可能会改变响应body的长度时,则需要始终清除Content-Length响应header(如果有的话)在 header 过滤器中强制执行流式输出,如
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(未测试)