【工作】 解决设置Accept-Encoding为gzip,deflate后返回数据异常乱码问题-一一网络 【工作】 解决设置Accept-Encoding为gzip,deflate后返回数据异常乱码问题 – 一一网络

【工作】 解决设置Accept-Encoding为gzip,deflate后返回数据异常乱码问题

【背景描述】

交付反馈一个客户请求我们的一个业务查询接口,在我们的后台日志观察客户的数据请求都是正常返回的,但是用户反馈,约有50%请求无法正常接收到结果。且对方提供了数据请求时候返回的报文header,如下:
结果返回正常时候的header头信息:
20180403151221
结果返回异常时候的header头信息:
20180403151135

【解决过程】

从两张图片来看,数据返回正常时候并没有“Content-Encoding: gzip“,即当传输的数据采用gzip时候,会造成请求结果异常。
我们前端采用的nginx作为代理转发服务器,检查gzip相关配置参数如下:
20180403153006
可以看到,对于大于1k且满足压缩类型(默认就已经包含text/html,所以上面没写)的数据,服务器在传出数据的时候会进行压缩。
但是我们给客户的客户端是针对所有企业用户的,目前只有这个客户反馈有异常,其他客户均没有。经过和客户沟通,对方在我们提供的客户端代码中自己添加了一条代码headers.put(“Accept-Encoding”, “gzip,deflate”);,如下图:
20180403145920
这条代码就是造成异常的主要原因:

普通浏览器访问网页,之所以添加:”Accept-Encoding” = “gzip,deflate” ,那是因为浏览器对于从服务器中返回的对应的gzip压缩的网页,会自动解压缩,所以,其request的时候,添加对应的头,表明自己接受压缩后的数据。 
而此代码中,如果也添加此头信息,那么请求中就带有”Accept-Encoding”,它将会从nginx服务器获取到压缩过的数据,而我们的客户端没有解码功能,而将压缩后的数据当做普通的html文本来处理,当前显示出来的内容,是乱码了

【解决总结】

想要获得正确网页内容,而非乱码的话,就有两种方式了:
1.不要设置Accept-Encoding的Header
//req.Headers.Add(“Accept-Encoding”, “gzip,deflate”);
2.设置Accept-Encoding的Header,同时设置对应的自动解压缩的模式
req.Headers[“Accept-Encoding”] = “gzip,deflate”;
req.AutomaticDecompression = DecompressionMethods.GZip;
结果证明,这样也是可以获得对应的格式正确的数据,而不是乱码的。
这就意味着,如果你获取网页内容太大的话,那么还是可以用这个办法的,这样就可以让HttpWebRequest自动帮你实现对应的解压缩了,可以减少数据数据传输量,节省时间,提高效率。需要注意的是,如果是请求的网页返回的内容不多的话,比如只有几K,那么用了此自动解压缩的设置,也没啥效率的提高,因为毕竟自动解压,也是要花时间的。所以,就是个权衡问题了,以实测结果为准,觉得是否采用自动解压。
参考:https://blog.csdn.net/mycar001/article/details/78391028

免责声明:务必仔细阅读

  • 本站为个人博客,博客所转载的一切破解、path、补丁、注册机和注册信息及软件等资源文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。

  • 本站为非盈利性站点,打赏作为用户喜欢本站捐赠打赏功能,本站不贩卖软件等资源,所有内容不作为商业行为。

  • 本博客的文章中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.

  • 本博客的任何内容,未经许可禁止任何公众号、自媒体进行任何形式的转载、发布。

  • 博客对任何脚本资源教程问题概不负责,包括但不限于由任何脚本资源教程错误导致的任何损失或损害.

  • 间接使用相关资源或者参照文章的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 博客对于由此引起的任何隐私泄漏或其他后果概不负责.

  • 请勿将博客的任何内容用于商业或非法目的,否则后果自负.

  • 如果任何单位或个人认为该博客的任何内容可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明至admin@proyy.com.我们将在收到认证文件后删除相关内容.

  • 任何以任何方式查看此博客的任何内容的人或直接或间接使用该博客的任何内容的使用者都应仔细阅读此声明。博客保留随时更改或补充此免责声明的权利。一旦使用并复制了博客的任何内容,则视为您已接受此免责声明.

您必须在下载后的24小时内从计算机或手机中完全删除以上内容.

您使用或者复制了本博客的任何内容,则视为已接受此声明,请仔细阅读


更多福利请关注一一网络微信公众号或者小程序

一一网络微信公众号
打个小广告,宝塔服务器面板,我用的也是,很方便,重点是免费的也能用,没钱太难了,穷鬼一个,一键全能部署及管理,送你3188元礼包,点我领取https://www.bt.cn/?invite_code=MV9kY3ZwbXo=


一一网络 » 【工作】 解决设置Accept-Encoding为gzip,deflate后返回数据异常乱码问题

发表评论

发表评论

一一网络-提供最优质的文章集合

立即查看 了解详情