场景:node服务调用javaee服务的http接口
遇到的问题:在开发环境中,node服务能正常获取到接口返回的json字符串;但是在测试环境中,发现node服务获取到的json字符串是乱码
分析:
1.首先考虑到是测试环境机器编码不一致。但是排查之后,node服务的机器和java服务器编码均一致。
2.由于返回的json串都是英文字符,且乱码长得比较奇怪:���FM��&y�yA�ǑK�n�3Wh"�^/��tc���M�FT���z����om-�����g���)��zҝn��4����¢�BGi
3.接下来考虑开发测试环境的差异。由于测试环境的服务间通讯均通过内部域名访问,内部域名均配置在nginx集群中,因此,怀疑是nginx集群在转发请求的时候做了什么事情。
4.接下来,通过增加日志,把返回的请求头和数据全打出来。发现测试环境和开发环境的请求头有差异,测试环境的请求头中多了"content-encoding":"gzip"。此设置,表示会将请求返回的数据压缩,以减小传输的数据大小。
5.最后查看nginx的配置,发现配置了gzip。确定是nginx加上的这个请求头
解决方案:node服务在判断有gzip属性时,先解压缩数据,再解析