openresty 如何正确修改响应内容?

87 天前
 dunhanson

zlib 解压内容正常,但是压缩后就不正常,页面无法展示

-- body_filter_by_lua_file test.lua
if ngx.header.content_encoding:lower() == "gzip" then
    local res, eof = ngx.arg[1], ngx.arg[2]
    local zlib = require "zlib"
    -- 解压
    res = zlib.inflate()(res)
    ngx.log(ngx.INFO, 'inflate res:'..res)
    -- 替换
    res = string.gsub(res, 'aaa', 'bbb')
    -- 压缩
    res = zlib.deflate()(res, 'sync')
    ngx.log(ngx.INFO, 'deflate res:'..res)
    ngx.arg[1] = res
end
1292 次点击
所在节点    程序员
6 条回复
dunhanson
87 天前
有没有大佬知道?
moen
87 天前
更改内容后可能会对不上 Content-Length ,需要在 header_filter 把这个 header 去掉。openresty 文档有提及过这点
dusu
86 天前
不仅 length 要重置
返回的 header 要不丢掉 gzip 头 要不也要 gzip 数据
joyoyao
86 天前
ngx.header.content_length = nil
-- in case of upstream content is compressed content
ngx.header.content_encoding = nil

-- clear cache identifier
ngx.header.last_modified = nil
ngx.header.etag = nil

还有个简单的方法,请求的时候就不要压缩,更改 accept-encoding: 设置空,请求过来的数据直接是明文,方便更改。
dunhanson
86 天前
@moen 我用原文压缩也是一样
dunhanson
86 天前
@joyoyao 按你写的也是有问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1087929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX