作者回复: 因为ngx.say为了支持chunked,即多次调用ngx.say仍可作为一次response返回,所以不会主动设Content-Length。chunked_transfer_encoding目前代码中也不影响上述行为。
作者回复: 抓包对比下,先确认响应,再确认请求
作者回复: 在一次请求中处理全部的body会导致严重的内存消耗,影响Nginx的并发处理能力。所以,我的意思是说,在多次调用中处理同一个请求,此时你需要用状态机思路处理请求,通常需要一个 context结构体,而ngx.ctx就是为这个而生,而多次调用即指body_filter_by_lua
作者回复: 在头部过滤阶段,先判断编码格式是不是简体,若是简体,先将Content-Length去除,改为Chunk传输方式(见我的课程《Web协议详解与抓包实战》第21课),生成一个context结构体,用以在多次包体过滤回调中做状态维持数据结构,接下来在包体过滤时修改包体,将简体替换为繁体。
作者回复: 实时加水印?body_filter。提前加水印更合适。