curl --compressed -H 'Accept-Encoding: gzip' https://example.com/api/list
# Nginx
gzip_types application/json;

接口响应开了压缩后,部分客户端解析 JSON 报错,抓包看到的是二进制内容。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:响应声明了压缩编码但客户端没有按对应方式解压,或中间层重复压缩。

围绕「接口 gzip 乱码」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

处理上按这个顺序:确认响应头与内容一致;避免对图片等已压缩类型再压;用 curl 加解压参数验证。

确认没问题再收工,客户端能正常解压并解析 JSON,响应体积明显下降。

作者 9823189