记一次接口状态码200但是浏览器解析数据失败
表象
浏览器表象
错误信息 net::ERR_CONTENT_DECODING_FAILED 200 (OK)
排查
分析
整个流程是这样的
ui -> 脱敏服务 -> 网关(底层是nginx) -> nginx -> 服务
ui调用脱敏服务, 脱敏服务调用网关, 网关负载nginx, nginx再负载服务, 这条链路, 就会报上面的错误
ui -> 脱敏服务 ->网关(底层是nginx) -> 服务
ui调用脱敏服务, 脱敏服务调用网关, 网关直接负载服务, 这条链路, 就不会报错
直接调用接口是好的, curl等, 但是在浏览器中就会报错
于是对比了两种方式, 响应header的内容
net::ERR_CONTENT_DECODING_FAILED 200 (OK)
再加上报错的内容, 虽然http状态码200了, 但是浏览器解析失败,
但是直接调用接口是好的, 说明数据不对, 导致浏览器解析不了
对比了一下, 在response headers中, 一个有content-encoding: gzip
一个没有, 所以
我怀疑数据gzip的格式出了问题, 所以浏览器解析数据失败
因为请求头里接受编码的方式有gzip, nginx开启了gzip, 所以响应头里给了gzip的编码方式
但是又因为返回数据的gzip格式有问题, 所以浏览器解析失败
验证
因为网关底层是nginx, 所以这边格式的转换不担心, 于是猜想脱敏服务这一块的转发与gzip的关系
于是尝试了一下新的链路
ui -> 网关(底层是nginx) -> nginx -> 服务
浏览器就正常了, 所以, 应该是脱敏服务的处理有些问题
修改及测试(解决)
这里提供了思路
临时解决的话, 就是要关闭nginx的gzip
如果要解决的话就要找到响应数据的gzip格式为何不对, 并修正
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
2018-04-15 Ubuntu Sublime 配置