记一次接口开发中遇到的非中文乱码

时间:2022-01-28 04:10:41

场景: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属性时,先解压缩数据,再解析