微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

记一次接口状态码200但是浏览器解析数据失败

表象

浏览器表象

错误信息 net::ERR_CONTENT_DECODING_Failed 200 (OK)

image

image

排查

网关(底层是Nginx) -> Nginx -> 服务
网关负载Nginx, Nginx负载服务, 这条链路, 就会报上面的错误

网关(底层是Nginx) -> 服务
网关直接负载服务, 这条链路, 就不会报错

直接调用接口是好的, curl等, 但是在浏览器中就会报错

于是对比了两种方式, 响应header的内容

image

net::ERR_CONTENT_DECODING_Failed 200 (OK)
加上报错的内容, 虽然http状态码200了, 但是浏览器解析失败,
但是直接调用接口是好的, 说明数据不对, 导致浏览器解析不了
对比了一下, 在response headers中, 一个content-encoding: gzip
一个没有, 所以
我怀疑数据经过两次gzip, 浏览器只解压了一次, 导致解压的数据还是gzip, 所以浏览器解析数据失败
因为网关底层也是Nginx, gzip也是开启

修改及测试(解决)

我把这条报错的链路, 网关(底层是Nginx) -> Nginx -> 服务
修改Nginx配置, 把Nginx动态代理这个服务的gzip配置关掉

# 修改配置
cd /usr/local/Nginx/conf/ && vim Nginx.conf

gzip off;

# 修改后重启
Nginx -s reload

image

之所以要在location /后面加, 思想就是哪一块有问题, 修改哪一块, 不动其他的地方.
修改后重启Nginx

再次访问, 发现ok了, 证明猜想正确!

对比

对比了一下两次的时间, 没有差距

image

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐