代码之家  ›  专栏  ›  技术社区  ›  Gang Sun

如何在openresty中通过lua*更改body\u filter\u中的内容长度

  •  2
  • Gang Sun  · 技术社区  · 7 年前

    我使用openresty作为代理服务器,这可能会改变上游的响应。指令头filter\u by\u lua*在body\u filter\u by\u lua*之前执行。但我在body\u filter\u by\u lua*中更改了内容长度,当时已经发送了标题。

    那么,当来自上游的响应在body\u filter\u中被_lua*更改时,如何设置正确的内容长度呢?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Alexander Altshuler    7 年前

    从…起 https://github.com/openresty/lua-nginx-module#body_filter_by_lua

    当Lua代码可能更改响应正文的长度时,需要始终清除标题过滤器中的内容长度响应标题(如果有),以强制流式输出,如中所示

     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"';
     }
    

    http://greenbytes.de/tech/webdav/rfc2616.html#chunked.transfer.encoding