我使用Nginx + lua模块和body_filter_by_lua
指令。
Nginx-lua docs said
当Lua代码可能更改响应正文的长度时,则需要始终清除标头过滤器中的Content-Length响应标头(如果有)以强制执行流输出。
ngx.header.content_length = nil
Transfer-Encoding: chunked
这个回复?更新
作为临时解决方案,我将响应转换为chunked via
ngx.header['Content-Type'] = "text/html"
ngx.header['Content-Length'] = nil
ngx.header['Transfer-Encoding'] = 'chunked'
并在内容重写阶段
-- Length of current chunk.
local hexlen = string.format("%x", #ngx.arg[1])
ngx.arg[1] = hexlen .. "\r\n" .. ngx.arg[1] .. "\r\n"
-- Last chunk. Send final sequence.
if (ngx.arg[2]) then
ngx.arg[1] = ngx.arg[1] .. "0\r\n\r\n"
end
更新2。
使用ngx.location.capture
!