【问题标题】:How to change Content-length in body_filter_by_lua* in openresty如何在 openresty 中更改 body_filter_by_lua* 中的内容长度
【发布时间】:2017-07-28 20:27:54
【问题描述】:

我使用 openresty 作为代理服务器,它可能会改变来自上游的响应。指令 header_filter_by_lua* 在 body_filter_by_lua* 之前执行。但是我在body_filter_by_lua*中更改了Content-length,当时已经发送了headers。

那么当body_filter_by_lua*中来自上游的响应发生变化时,如何设置正确的Content-length?

谢谢!

【问题讨论】:

    标签: nginx openresty


    【解决方案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(没有测试)

    【讨论】:

    • 谢谢,它有效。并且在我清除了标头过滤器中的 Content-Length 响应标头(如果有)之后,nginx 确实设置了块传输编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多