摘要 :本分整理自《2018 腾讯移动游戏技术评审标准与实践案例》,介绍了两种常见的 HTTP 劫持(HTTP-Hijacking)的案例以及对应的解决方法。

案例 1:HTTP 资源劫持

2017 年 11 月, 某游戏发布客户端更新包后,收到部分玩家投诉客户端更新失败。 经过排查发现,玩家网络正常,但是下载到的文件客户端检测异常。 怀疑是下载资源文件时遇到了 http 劫持,联系该玩家配合进行测试,访问正常 url 和回源 url 下载到的文件对比发现,正常 url 下载的文件 md5 是错误的, 通过回源 url 请求下载的文件 md5 是正确的。 判定是遇到了 http 劫持, 客户端先暂时通过热更 dir 模块修改资源 url 为回源 url,最终该玩家客户端资源更新正常, 成功进入游戏。

案例 2:302 跳转劫持

2017 年 5 月, 某游戏发布客户端更新包后,收到福建某个玩家投诉客户端更新失败, 开发商根据玩家反馈的报错截图发现是某个资源 url 下载异常。 运维联系玩家,让玩家通过手机浏览器访问该 url,结果跳转到了错误的 url。 可以判定玩家访问 url, 302 重定向被运营商指向了错误的 url,客户端先暂时通过热更 dir 模块修改资源 url 为回源 url,最终该玩家客户端资源更新正常, 成功进入游戏。

排查过程:

当玩家投诉客户端升级报错后,我们可以按以下步骤进行排查: 玩家客户端资源升级报错 --> 联系开发定位是哪个 url 下载失败 --> 让玩家在(与游戏相同网络下) 手机浏览器访问该 url --> 若下载失败, 则让玩家用手机浏览器访问回源 url --> 由于回源 url 有多个, 某个不行可以切换到备用地址,提高玩家的下载成功率 --> 确认访问正常后, 让客户端临时使用回源 url 给玩家提供资源下载服务。

解决方案:

以上案例已在多个游戏发生过, 针对 http 资源劫持的现象,我们推出了防劫持的回源代理方案,失败的用户通过直连回源代理服务器来重新获取资源,绕开了 196 当前异常的 cdn 节点,大幅缓解资源劫持现象。

方案介绍

以下是解决方案的架构图

当用户通过正常路径访问 oc 节点失败后,我们提供了两种接入方式给用户

HTTP 回源图

  1. 静态方式:

    在业务原 url 前面加上 download.mocmna.qq.com,支持 http 和 https,调用举例如下:

    若业务 url 为 http://image.xxx.qq.com/test.zip,则

    http 接入方式为:http://download.mocmna.qq.com/image.xxx.qq.com/test.zip

    https 接入方式为:https://download.mocmna.qq.com/image.xxx.qq.com/test.zip

  2. 动态方式(推荐):

    客户端请求 download01.ino.qq.com/GetUrlHead?client=x.x.x.x ,获取域名或 IP, 获取得到域名或 IP 后,再按照【静态方式】操作。

方案优势

  1. 优质链路切换:根据用户出口 IP,智能选择网络路径,避开下载失败路径
  2. 全网劫持监测:利用 Q 调和灯塔平台探测技术,监控回源域名或热点 url
  3. 数据分析:完善的数据分析报表能力提供单用户的日志定位分析辅助全网监测