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

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

  1. K8S(18)容器环境下资源限制与jvm内存回收

    K8S(18)容器环境下资源限制与jvm内存回收 目录 K8S(18)容器环境下资源限制与jvm内存回收 一.k8s中的java资源限制与可能的问题 方案1:通过JVM的Xms和Xmx参数限制 方案2 ...

  2. Linux环境下使用图形化界面的SVN客户端软件-RabbitVCS

    如果想在Linux环境下使用图形化界面的SVN客户端软件,那么RabbitVCS绝对是首选,可以媲美Windows环境下用的TortoiseSVN,甚至连操作都基本一样,所以强烈推荐给各位童鞋. Ra ...

  3. Linux环境下 多线程下载 (Python 实现版)

    本文是多年前学习编程时参照一个网友程序的基础之上改写的, 采用Python语音编写, 多线程下载功能, 可以有效提高Linux下原有下载工具中的一些不足,以下给出具体代码. #!/usr/bin/py ...

  4. linux环境下zookeeper下载安装

    步骤一:安装配置jdk环境 1.下载解压jdk-8u221-linux-x64.tar.gz 2.打开 配置文件,vim /etc/profile,添加如下配置,添加完成记得source /etc/p ...

  5. python2.7环境下的flask项目导入模块失败解决办法

    如下一个flask项目的目录: 这个flask项目在python3.6环境下可以正常启动,但是在python2.7环境下如下报错提示: 提醒模块找不到.如下解决方法: 只需要在views目录里面加一个 ...

  6. JDK_1.8的Windows和Linux环境下的下载与安装

    下载: Eclipse需要Jdk,MyEclipse有自带的Jdk 直接点击下载. Windows下JDK安装: 双击运行程序 下一步: 路径 更改到E:\Software\Java\jre1.8.0 ...

  7. Windows服务器环境下jenkins下载和安装

    1.下载jenkins 在windows系统上搭建jenkins持续集成有两种方法:1.war文件,可以用tomcat或者java命令直接运行2.msi安装,作为系统服务后台运行 下载地址 https ...

  8. windows环境下mongodb下载、安装和使用总结

    一.首先安装mongodb 1.下载地址:http://dl.mongodb.org/dl/win32/x86_64 2.解压缩到自己想要安装的目录,比如d:\mongodb 3.创建文件夹d:\mo ...

  9. Window环境下 Git 下载Android源码

    1.需要的工具 git.vpn代理 2. 设置git代理(Google source 无法下载,git设置代理) git config --global http.proxy "localh ...

随机推荐

  1. golang(5):编写WebSocket服务,client和html5调用

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...

  2. Linux新手笔记 sudo

    centos 6.4 32bit 你是也像我一样,厌烦了在root用户和个人用户之间来回切换.或者干脆直接用root用户.可以这样设置,然后在命令前加sudo 即可使用自己到密码,临时用root身份执 ...

  3. Objective-c 数组对象

    首先我们必须知道数组的概念:数组是有序的对象集合,一般情况下,一个数组的对象都是相同类型的.数组当中也存在可变数组和不可变数组. 1. 不可变数组 (NSArray) 可变数组 NSMutable 是 ...

  4. JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?

    一.静态包含指令<%@include file="fileurl"%> 两个jsp页面的<%@page contentType="text/html:c ...

  5. 五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写

    调度器: 定时任务是通过调度器实现的.cocos2d-x推荐用调度器而不是其他方法实现定时任务.Node类都知道如何调度和取消调度事件. 有3种调度器: 默认调度器:schedulerUpdate() ...

  6. linux(ubuntu) 遇到的问题 --1

    1.使用sudo提示用户不在sudoers文件中的解决方法 切换到root用户 su root 查看/etc/sudoers文件权限,如果只读权限,修改为可写权限 [root@localhost ~] ...

  7. ubuntu vim终端编辑命令

    一. VIM高亮 进入vim后,在普通模式下输入如下命令,开启php代码高亮显示   :syntax enable   :source $VIMRUNTIME/syntax/php.vim   二. ...

  8. BeanUtils复制属性

    package xiao; public class User2 { private String name; private String password; public String getNa ...

  9. 我被SQL注入撞了一下腰

    网站的注入漏洞,应该说绝大多数做web开发的人都知道的事情.可是没想到从事6,7年开发工作的我,却会在这上栽了跟头,真是郁闷啊.心情很纠结,按照老婆的话,怎么感觉我像失恋了一样. 事情的起因还是在几个 ...

  10. C++模板:文件操作

    freopen("demo.in","r",stdin); freopen("demo.out","w",stdout) ...