Skip to content

问题描述

某日清晨,策划跑过来说我们的灰度服更新异常,具体表现是在更新界面显示下载文件校验失败。

解决过程

由于我们的资源已经在对内的下载服务器上进行过更新测试,因此怀疑是灰度用的正式cdn上传的文件有问题,比如未上传完整。运维表示文件已上传完成,一切正常。 于是决定对比一下两个更新服务器上文件差异,因为我们每次都是放出去全量更新包,每个文件都去对比不现实,因此先去查了一下更新日志,找出了这次更新需要下载的文件。再对比了一下下载过程中下载的文件大小,将范围缩小到其中的几张png图片上。尝试将正式服的资源下载回来后发现文件已经损坏,无法用图片编辑器打开,用二进制方式打开看了下,果然文件头已经不是png文件头的形状了。

到此,当然没有结束,还得帮运维找出可能导致损坏的原因。好吧,我们继续查。 将我们出给运维的更新包内文件解压出来,跟cdn服务器下载回来的资源进行对比。

源文件文件头为 8950 4e47 0d0a 1a0a 正常的png文件头 目标文件文件头为 8950 4e47 0a1a 0a00 被改了的文件头

对比了下发现目标文件把源文件的0x0d 0x0a 替换成了 0x0a。 0x0d 0x0a就是\r\n,把这替换成\n,显然就是被当成文本文件给处理了。具体是运维上传时候被处理了还是下载服务器给改了,我们就不得而知了,后续交给运维处理。

未完待续