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间进行轮流切换。切换的时机为当前链接方式发生错误时,即切换到另一方式去。

转载于:https://www.cnblogs.com/james1207/p/3293993.html

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

  1. LINUX环境下资源下载中文目录及中文文件名称问题

    为什么80%的码农都做不了架构师?>>>    http://www.yeeach.com/2009/04/09/linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E ...

  2. linux下文件下载中文,LINUX环境下资源下载中文目录及中文文件名称问题

    项目采用UTF-8作为统一的编码(JVM中缺省字符集.Tomcat的URIEncoding字符集.Struts2的Locale字符集配置.过滤器字符集.页面统一编码.数据库编码.mysql数据库连接字 ...

  3. win10,64位环境下curl7下载安装和配置详细图文教程(亲测有效)

    win10,64位环境下curl7下载安装和配置教程 一.前期准备: (1)windows10,64位: (2)python3.8 二.下载: 三.安装: 四.环境变量配置: (1)新建 ==CURL ...

  4. Windows、linux环境下neo4j下载教程梳理

    Windows.linux环境下neo4j下载,无需注册 安装好java 后,要下载 neo4j ,但是官网打不开,下载不了.虽然网上那么多教程,但是小白的我试了N多命令,很多教程是关于 neo4j- ...

  5. Nginx在Linux(centos7)环境下的下载与安装

    Nginx在Linux(centos7)环境下的下载与安装 一.下载Nginx 1.免费的开源版本官方网址 2.选择需要下载的版本 二.安装Nginx 1.安装前准备(需要安装相关依赖库) 2.安装N ...

  6. phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module……

    phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module-- 废话不多说,我只提供一种情况下的解决思 ...

  7. Linux环境下服务器利用组播来获取客户端IP

    Linux环境下服务器利用组播来获取客户端IP 单播是两个主机之间端对端通信(比如TCP.UDP通信),而广播用于一个主机对整个局域网中所有主机的通信.单播和广播是两个极端,要么对一个主机通信,要么对 ...

  8. 关于在群集环境下UDDI Web应用程序组件配置失败问题

    此问题是在群集环境下配置UDDI Service 3.0时出现,此错误是UDDI  Service 3.0 的一个Bug,英文版补丁在官方已可以下载,中文版已开发完成,官网还无法下载,有遇到此问题的朋 ...

  9. windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题

    之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...

最新文章

  1. 【Python-ML】自适应线性神经网络(Adaline)
  2. vue兼容ie10问题并且node——module中出现es6语法如何解决
  3. Zend Guard 7 , Zend Guard Loader处理PHP加密
  4. Map与WeakMap
  5. 编译安装android7.0,android7.0 源码编译问题总结
  6. 12个免费的 Twitter Bootstrap 后台模板
  7. libQt5Core.so: undefined reference to `dlclose@GLIBC_2.4'
  8. uni-app 官网教程
  9. matlab 多属性权重,多属性决策的权重确定方法及matlab 程序
  10. 实现自己选取歌曲制作手机铃声
  11. 张轩睿和Selina要复合?任家萱的粉丝们会同意吗
  12. C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码
  13. oracle ora 31644,dmp文件损坏导致ORA-39014 ORA-39029 ORA-31693错误
  14. 电子工程师的自我修养 - 锂电池的测量电路
  15. 慈爱的教育部门被误解了 --- 真正减负令的实施方案探讨
  16. 【jQuery】 # jQuery选择器
  17. 企业管理需要的启示:没有任何借口
  18. 关于免费的虚拟主机与虚拟主机的一些事情
  19. spring的ioc和di
  20. 淘宝到底还能不能盈利了

热门文章

  1. python实现数据恢复_使用sklearn进行对数据标准化、归一化以及将数据还原的方法...
  2. android-support安装不,导入android.support无法解析
  3. mysql中nvl_Mysql中类似于oracle中nvl()函数的ifnull()函数
  4. django_form校验
  5. 2023年考研之路或将更难
  6. Asp.net就业课之Ado.net第一次课
  7. nginx+lua+redis 灰度发布实现方案
  8. 西瓜书学习记录-决策树(第四章)
  9. 《数据库SQL实战》统计出当前各个title类型对应的员工当前薪水对应的平均工资。
  10. 《剑指offer》二维数组中的查找