Http内容长度缺席和保持活力

时间:2017-03-24 15:56:08

标签: http nginx lua http-content-length

我使用Nginx + lua模块和body_filter_by_lua指令。

Nginx-lua docs said

  

当Lua代码可能更改响应正文的长度时,则需要始终清除标头过滤器中的Content-Length响应标头(如果有)以强制执行流输出。

ngx.header.content_length = nil
  1. 它能打破保持连接吗?
  2. 是否会破坏有问题渠道的请求?
  3. 客户如何知道数据已完全从服务器读取?
  4. 为什么Nginx不会强制Transfer-Encoding: chunked这个回复?
  5. 更新

    作为临时解决方案,我将响应转换为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

0 个答案:

没有答案