• [移动网关]2G环境下资源下载有一定概率失败,客户端日志显示收到403错误


    2G环境下资源下载有一定概率失败,客户端日志显示收到403错误

    问题现象:
    测试同学在使用联通号码在移动网络环境下,访问连接得到的response_code出现是403,导致资源读取失败表情显示异常。

    问题重现步骤:
    资源都存放在res.domain.com域名下。如:http://res.domain.com/test_path_to_res/1001.json
    当在该移动网络环境下
    a. 在使用域名的url访问时,连接正常,读取正常,表情显示正常。
    b. 当后台push下来相应的ip代替res.domain.com进行替换连接时,在该机子上对某些ip(如:1*2.1*3.23.13)连接出现异常403。(替换后的连接url为:http://1*2.1*3.23.13/ test_path_to_res /1001.json)


    问题定位:
    阶段1: 会员后台同学告之在没有正确设置请求头信息”Host”时会返回403.
    所以首先进行客户端编码的自我排查,是正确的设置了”Host”头信息的。

    阶段2: 后台同学要求对联网信息抓包分析.
    a. 客户端抓包在该网络环境下只有回包没有出包,所以后台同学单独安排一台服务器抓取该服务器的请求包
    b. 经服务器抓包结果发现问题如下:
    经移动网关代理后,客户端设置的”Host”被网关篡改成了”X-Online-Host”的值,由” res.domain.com”被篡改成push下来的ip。见下图

    至此,问题定位为: 移动网关自动篡改”Host”信息内容导致后台返回错误码403.

    移动网关实际上就是一个HTTP的代理服务器,它对于X-Online-Host协议是这样处理的:
    截取请求头中的URL字段:
    如果没有http://字段的话,则将该字段作为相对URI,同X-Online-Host字段进行补全;
    如果有http://字段的话,则将该字段作为绝对URI,将host替换为X-Online-Host的值。

    本文为Sodino所有,转载请注明出处:http://blog.csdn.net/sodino/article/details/10755213

    要不?你尝试关注下微信公共帐号sodino,以后的博文将会推送给你。

    问题解决方案:
    经与相关人员讨论,有以下三种方案
    a. CDN服务器全面支持不使用Host信息也能正常访问。
    这是最根本的解决方式,但涉及人员及工作量都比较多,短期内暂时不可能。
    b. 后台判断当前用户的网络环境,当在移动网络下时,不push相应的ip.
    这个方案存在一些不确定性,如哪些移动网络可以使用ip也哪些不可以,另在切换网络时能否及时准确判断更改相应的push IP的问题。
    c. 客户端对该错误进行兼容。 (这是选用的方法)
    具体做法为:在使用原始域名url与ip拼接的url间进行轮流切换。切换的时机为当前链接方式发生错误时,即切换到另一方式去。

  • 相关阅读:
    Vi 和 Vim
    The C Programming Language-Chapter 5 Pointers and Arrays
    C# 4.0开始,泛型接口和泛型委托都支持协变和逆变
    数据库中的锁 and java StampedLock ReadWriteLock
    NetCore and ElasticSearch 7.5
    网关项目 ReverseProxy
    异常捕获&打印异常信息
    刷新:重新发现.NET与未来
    2019 中国.NET 开发者峰会正式启动
    .NET开发者必须学习.NET Core
  • 原文地址:https://www.cnblogs.com/james1207/p/3293993.html
Copyright © 2020-2023  润新知