• leitiannet
    2019-03-01
    OpenResty输出响应时为什么没有Content-Length?
    chunked_transfer_encoding off;
    location ~ /say {
        content_by_lua_block {
            ngx.say('12345')
        }
    }
    C:\curl-7.62.0\bin>curl.exe -i http://127.0.0.1:8000/say
    HTTP/1.1 200 OK
    Server: openresty/1.13.6.2
    Date: Fri, 01 Mar 2019 14:09:16 GMT
    Content-Type: text/html
    Connection: close

    12345

    C:\curl-7.62.0\bin>
    展开

    作者回复: 因为ngx.say为了支持chunked,即多次调用ngx.say仍可作为一次response返回,所以不会主动设Content-Length。chunked_transfer_encoding目前代码中也不影响上述行为。

    
     2
  • 陈扬鸿
    2019-07-10
    老师,我按照你教我的做法,替换了响应body,但是只有在curl工具请求时有效,用浏览器请求不会显示已替换的内容,这是为什么呢?需要怎么解决呢?谢谢!

    作者回复: 抓包对比下,先确认响应,再确认请求

    
    
  • 陈扬鸿
    2019-07-07
    关于上次我所问反向代理一个网站把取得的html源码中的简体中文转化成繁体中文,谢谢老师的回答,但是我没有看懂,nginx可以把它在反向代理取得的html源码存到一个变量中吗,如果可以,可以继续通过lua来加工,并把里面的简体替换成繁体中文,最后把转化后的html源码发给客户端即浏览器,这样可以吗?要怎么实现,请老师指导!

    作者回复: 在一次请求中处理全部的body会导致严重的内存消耗,影响Nginx的并发处理能力。所以,我的意思是说,在多次调用中处理同一个请求,此时你需要用状态机思路处理请求,通常需要一个 context结构体,而ngx.ctx就是为这个而生,而多次调用即指body_filter_by_lua

    
    
  • 陈扬鸿
    2019-07-04
    老师,我想实现nginx反向代理访问一个网站,并取得网站的response,把html源码中的汉字转换成繁体,这个要怎么解决呢?请老师赐教。谢谢!

    作者回复: 在头部过滤阶段,先判断编码格式是不是简体,若是简体,先将Content-Length去除,改为Chunk传输方式(见我的课程《Web协议详解与抓包实战》第21课),生成一个context结构体,用以在多次包体过滤回调中做状态维持数据结构,接下来在包体过滤时修改包体,将简体替换为繁体。

    
    
  • Panda
    2019-07-02
    Lua 给 图片加水印的 模块 一般在哪个阶段

    作者回复: 实时加水印?body_filter。提前加水印更合适。

    
    
我们在线,来聊聊吧