ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-15 00:33:44  阅读:1015  来源: 互联网

标签:200 网关 浏览器 接口 nginx 报错 gzip


表象

浏览器表象

错误信息 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

标签:200,网关,浏览器,接口,nginx,报错,gzip
来源: https://www.cnblogs.com/loseself/p/16147223.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有