Http压缩编码导致数据乱码

news/2025/11/7 17:56:57/文章来源:https://www.cnblogs.com/lostsea/p/17268929.html

在一次项目上线时,发现部分接口请求失败,但是无返回数据是会成功的问题。

开始排查

一开始以为是通信加解密导致的问题,但是部分接口可以,部分接口报错,又排除了这个选项。

于是考虑是网关问题,还是服务端代码问题。

于是找到我们的运维,手动写了一条curl命令,手动调服务端接口,接口返回正常

curl 'http://******/gw/Order/getOrderList' \
--header 'sign: 189762E1DCCDE0F5A93327FEB3469F45' \
--header 'timestamp: 1677636141' \
--header 'Authorization: Bearer *************************' \
找到问题

我们判断是网关导致的问题,我们先关闭了网关返回数据的加密,发现返回数据正常。

于是我们开始研究是否是代码问题,可是他在开发以及测试环境都是正常的,而且它只是对数据流进行了一次加密,生产环境也没办法调试。

var originBody = context.Response.Body;
try
{var memStream = new MemoryStream();context.Response.Body = memStream;await _next(context);memStream.Position = 0;var responseBody = await new StreamReader(context.Response.Body, Encoding.UTF8).ReadToEndAsync();var encreptedBody = context.EncryptResponse(encryptionConfig, responseBody);responseBody = Convert.ToBase64String(encreptedBody);context.Response.ContentLength = responseBody.Length;var memoryStreamModified = new MemoryStream();var sw = new StreamWriter(memoryStreamModified);sw.Write(responseBody);sw.Flush();memoryStreamModified.Position = 0;await memoryStreamModified.CopyToAsync(originBody);
}
catch (Exception ex)
{_logger.LogError(ex, "ResponseEncryptionMiddleware错误");
}
finally
{context.Response.ContentType = "text/plain";context.Response.Body = originBody;//context.Response.ContentType = "text/plain";
}

于是我们将单个接口关闭加密返回数据,并本地使用网关调用生产接口。也就是在生产的接口外面做一次代理。

我们请求了产生问题的接口,发现了问题,我们从读取到的context.Response.Body是乱码

image-20230301144501236

可是这里怎么可能是乱码呢,我们查看了返回的编码方式,他是正常的application/json; charset=utf-8内容。

image-20230301144650229

尝试了好久还是找不到问题,突然无意中发现返回的响应头中有两个未见的字段:Content-Encoding,Transfer-Encoding

image-20230301150118513

感觉就是他们连个搞得鬼,Content-Encoding是返回数据流编码格式,Transfer-Encoding是传输编码。

查了下百度发现和Transfer-Encoding没啥关系,那主要原因就是Content-Encoding这个东西了

已知的压缩方式有5种:

Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
Content-Encoding: identity
Content-Encoding: br

服务端返回编码压缩方式是根据客户端传入参数Accept-Encoding判断的,

Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *

使用Postman调用是移除掉Accept-Encoding 参数后,接口返回参数正常。

单独保留deflate参数,接口返回参数正常。看来就是返回的编码格式了。

参考了一下百度的代码,仅保留br编码,对返回的数据流就行解密,得到的数据正常。

using StreamReader reader = new StreamReader(new BrotliStream(memStream, CompressionMode.Decompress));
responseBody = await reader.ReadToEndAsync();
处理问题

于是根据编码格式对文件流进行不同方式的解压

if (context.Response.Headers.ContentEncoding.ToString().ToLower().Contains("br"))//比如编码
{using StreamReader reader = new StreamReader(new BrotliStream(memStream, CompressionMode.Decompress));responseBody = await reader.ReadToEndAsync();
}
else if (context.Response.Headers.ContentEncoding.ToString().ToLower().Contains("gzip"))//gzip编码
{using StreamReader reader = new StreamReader(new GZipStream(memStream, CompressionMode.Decompress));responseBody = await reader.ReadToEndAsync();
}
else//其他
{                                                                                                                                	 responseBody = await new StreamReader(context.Response.Body, Encoding.UTF8).ReadToEndAsync();
}

可是又产生了新的问题,接口返回无响应,估计又是编码的问题。

我想既然解压了,是不是还要压缩一下,对返回数据进行压缩代码尝试,均以失败告终。

由于时间比较紧,还要忙其他的事情,只好不走压缩

Request请求进来时,将压缩方式改为默认方式

context.Request.Headers.AcceptEncoding = default;

参考文章:

  1. https://blog.51cto.com/u_13758447/5985186

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未来出行智慧车联网与智慧交通方案 NRF9151

​随着5G、物联网(IoT)、人工智能(AI)和大数据技术的快速发展,车联网(IoV)与智慧交通已成为智慧城市建设的重要组成部分。通过智能芯片与先进通信技术的应用,车联网与智慧交通正在深刻改变人们的出行方式,推动…

32

所学时间:9时间 博客量:1 代码量:1oo 所学知识:人机交互实验,机器学习

PHY6252低成本BLE5.2智能灯控智能家居蓝牙透传芯片模块

PHY6252低成本BLE5.2智能灯控智能家居蓝牙透传芯片模块简介 PHY6252是一款支持BLE 5.2功能的系统级芯片(SoC),集成了低功耗的高性能多模射频收发机,搭载32位高性能低功耗处理器,提供64K retention SRAM、可选512/…

绩效考核永远算不清?用好这5张表就够了!

在很多公司里,绩效考核一直是个麻烦事。指标分不清、 权重算不准、 分数对不上口径, 主管每月打分靠感觉,HR 对各部门反复追数据,到月底总有一堆人说“我怎么比上个月低了”,整个过程既费时又不透明。 但实际上,…

Qwen-Audio:一种新的大规模音频-语言模型 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年成都知识产权服务商排名前十:杰诚智享领跑行业

文章摘要 随着数字化转型加速,成都知识产权服务行业在2025年迎来爆发式增长,中小企业对知识产权保护与线上营销的需求日益凸显。本文基于市场调研和用户口碑,为您呈现2025年成都知识产权服务商排名前十的权威榜单,…

DP压缩中的倒序遍历——01背包子序列计数从二维到一维,倒序遍历是巧合还是必然?

DP压缩中的倒序遍历——01背包&子序列计数从二维到一维,倒序遍历是巧合还是必然?这个联想太敏锐了!它们不是巧合,而是共享同一个核心思路的“同源技巧”——本质都是「一维DP压缩二维DP时,用倒序遍历保护“上…

推荐算法之粗排 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年TWS耳机磁铁厂家权威推荐榜单:手机磁铁/钕铁硼磁铁/稀土磁铁源头厂家精选

在TWS(真无线立体声)耳机市场持续增长的背景下,微型高性能磁铁作为决定耳机音质、续航与结构紧凑性的核心元件,其技术门槛与性能要求正日益提升。据行业调研数据显示,2024年全球消费电子用塑料磁铁市场规模约达1.…

2025年11月制冷设备/螺杆机维修厂家口碑排行榜单:阜阳市展翼翔制冷技术有限公司

文章摘要 2025年维修厂家行业持续发展,制冷服务需求增长,高效节能成为核心趋势。本文基于权威数据和用户口碑,发布维修厂家推荐排行榜单,重点介绍阜阳市展翼翔制冷技术有限公司的专业优势,并提供表单供参考选择。…

2025 年aippt 软件最新推荐排行榜:专业评测揭晓靠谱工具,覆盖一键生成、免费素材与多场景适配markdown 生成 ppt/word 生成 ppt/在线生成 ppt/文档生成 ppt 工具推荐

引言 在数字化办公加速渗透的今天,PPT 作为信息传递与成果展示的核心载体,其制作效率与呈现质量直接影响职场竞争力。然而传统制作模式下,内容逻辑梳理、设计排版调整往往耗费数小时甚至数天,非设计专业用户更难兼…

深圳GEO优化源头公司:GEO到底值不值得做?

在深圳,每天都有数十家企业问:“GEO优化到底值不值?”作为深耕AI营销的源头公司,讯灵AI见过太多企业从“犹豫观望”到“主动追加预算”—— 答案从来不是“跟风做”,而是“看能不能解决真问题”。 先看三个真实场…

2025年整个年度成都抖音/快手/小红书/视频号短视频代运营推广公司/厂家Top10排名:杰诚智享领跑行业

文章摘要 2025年,成都抖音推广行业随着短视频营销的爆发式增长,已成为中小企业获客的核心渠道。本文基于市场调研和案例数据分析,列出2025年成都地区抖音推广服务商Top10排名,旨在为企业提供参考。排名综合考虑服务…

靠谱的GEO搜索优化系统推荐,讯灵AI-GEO+Agent打开AI时代新纪元

随着生成式人工智能深度融入用户信息获取路径,AI搜索正以前所未有的速度重塑数字营销格局。在此背景下,GEO(生成式引擎优化,Generative Engine Optimization) 已从“营销新概念”跃升为企业获取流量、塑造品牌、驱…

2025年11月维修制冷螺杆机维修厂家推荐:高效制冷解决方案

摘要 随着制冷行业在2025年的快速发展,维修厂家市场呈现出技术升级和服务多元化的趋势。本文基于行业数据和用户口碑,为您呈现一份权威的维修厂家推荐排行榜单,旨在帮助用户选择高效、可靠的制冷服务提供商。排名综…

口碑好的GEO优化+智能体营销双引擎系统厂家

口碑好的GEO优化+智能体营销双引擎系统厂家剖析 在 AI 驱动营销变革的当下,单纯的 GEO 优化已难以满足企业 “精准触达 + 高效转化” 的全域需求,而 GEO+Agent 双引擎系统正成为企业抢占 AI 搜索流量、实现营销闭环的…

2025年11月阜阳制冷设备维修/螺杆机服务厂家推荐排行榜单:阜阳市展翼翔制冷技术有限公司位列榜首

摘要 本文探讨2025年维修厂家行业的发展趋势,随着制冷技术智能化和节能化需求的提升,维修服务正朝着专业化、集成化方向演进。行业竞争加剧,用户对口碑好、有实力的维修厂家需求日益增长。本文提供一份基于权威数据…

2025年11月成都抖音推广机构权威推荐榜TOP10:探究抖音推广机构

2025年11月成都抖音推广机构权威推荐榜TOP10:探究抖音推广机构 摘要 2025年成都抖音推广行业持续蓬勃发展,随着数字营销需求的增长,本地企业纷纷寻求专业服务商提升线上影响力。本文基于市场调研和用户反馈,整理出…

2025 年 11 月深圳店铺装修公司推荐排行榜,餐饮店铺装修,商场店铺装修,连锁店铺装修,零售店铺装修设计公司推荐

2025 年 11 月深圳店铺装修公司推荐排行榜 行业背景分析 深圳作为中国最具活力的创新城市之一,商业空间装修行业伴随着城市商业的快速发展不断升级。随着消费模式的变革,店铺装修已从简单的空间装饰转变为品牌形象塑…

2025 年 11 月密封胶条,系统门窗胶条,森特达胶条厂家最新推荐,实力品牌深度解析采购无忧之选!

引言 在密封材料领域,密封胶条、系统门窗胶条、森特达胶条作为关键组件,其质量直接影响终端产品的密封性能与使用寿命。为帮助采购商精准选择优质品牌,行业协会联合专业测评机构开展了 2025 年度胶条厂家测评工作。…