关于移动网关的私有代理协议:X-Online-Host

原文:http://www.cnblogs.com/xitang/archive/2011/11/07/2239454.html

众所周知,在国内的GPRS网络环境下,用户以cmwap接入点上网的情况居多。cmwap是中国移动的GPRS代理上网,因此在创建连接的时候,必须采用代理的方式进行连接。
假设我连接的URL为:http://wap.uc.cn/;
在标准代理中,是这样子的:
Conection to 10.0.0.172:80
GET http://wap.uc.cn/ HTTP/1.1
Host: wap.uc.cn

但是在J2ME中,程序并不能控制到TCP层,因此中国移动定义了一个私有协议字段:X-Online-Host。从移动要求的规范来看,我们只需要这样即可正常进行联网:
Conection to 10.0.0.172:80
GET / HTTP/1.1
Host: 10.0.0.172
X-Online-Host: wap.uc.cn
实际上对于程序来说,我们只需要将原来连接的url及http header中的host替换成10.0.0.172,并添加一个http header字段:X-Online-Host,值为原来的host。然后继续采用直连的方式即可正常进行联网。

这样问题就来了,很明显这是一个不标准的代理协议,不标准的地方在于:
GET / HTTP/1.1
因为在标准的代理协议规范中,定义了请求的必须是完整的URI。
这个问题在平常并不会出现,但是当请求的URL比较特殊时,问题就很明显了。
假设我连接的URL为:http://wap.baidu.com/logo.gif?img=http://wap.uc.cn/uc.png
使用X-Online-Host协议的联网:
Conection to 10.0.0.172:80
GET /logo.gif?img=http://wap.uc.cn/uc.png HTTP/1.1
Host: 10.0.0.172
X-Online-Host: wap.baidu.com
这样的请求到达移动网关之后,会被误发至http://wap.baidu.com/uc.png。但是实际上我们想要请求的是http://wap.baidu.com/logo.gif (?之后的表示变量)。
因为,移动网关实际上就是一个HTTP的代理服务器,它对于X-Online-Host协议是这样处理的:
截取请求头中的URL字段:
如果没有http://字段的话,则将该字段作为相对URI,同X-Online-Host字段进行补全;
如果有http://字段的话,则将该字段作为绝对URI,将host替换为X-Online-Host的值。

时间: 2024-12-22 21:46:24

关于移动网关的私有代理协议:X-Online-Host的相关文章

ubuntu-双系统 Ubuntu 无法联网,ping不通网关

问题描述 双系统 Ubuntu 无法联网,ping不通网关 这几天在win8的台式机上装了个Ubuntu 14.04双系统,64位的,但是在Ubuntu系统中怎么折腾也不能联网,照着网上各种说法配置都不行,路由器网关ping不通,报 Destination Host Unreachable,但ping本机地址正常,重启到windows系统也可以正常上网. 特来请教各位.下面详细说一下情况: 系统配置:Win8 + Ubuntu 14.04LTS 双系统64位UEFI启动,其中Ubuntu全新安装

下一代超大规模软件定义网络技术实践

云计算的 IT 架构已经在企业应用中表现出明显优势,但网络设计理念却必须是一种推倒重来的思想.为了适应云计算的灵活.弹性扩展.高效和低成本,网络设计要进化为集中式软件管理,可编程化,控制转发层面分离等.本次陈海泉分享了关于下一代超大规模软件定义网络技术实践. 以下是本次分享的内容整理. 大家好,我是 QingCloud 的工程师陈海泉,今天给大家分享一些 SDN/NFV 2.0 架构的网络技术.我解释一下什么是 SDN,SDN 就是软件定义网络.当然也不是所有网络定制一定要软件来实现,因为有很多

全面认识VPN (二),互联网营销

寻求适合的VPN方案 VPN 有三种解决方案,用户可以根据自己的情况进行选择.这三种解决方案分别是:远程访问虚拟网(AccessVPN).企业内部虚拟网(IntranetVPN)和企业扩展虚拟网(ExtranetVPN),这三种类型的VPN分别与传统的远程访问网络.企业内部的Intranet以及企业网和相关合作伙伴的企业网所构成的Extranet相对应.  1. 如果企业的内部人员移动或有远程办公需要,或者商家要提供B2C的安全访问服务,就可以考虑使用AccessVPN. AccessVPN 通

路由配置知识总结

主机接入网络: IP 手动指定 DHCP:Dynamic Host Configuration Protocol 169.254. NETMASK子网掩码 GATEWAY网关 HOSTNAME主机名 DNS DNS1 DNS2 DNS3 路由 Linux:网络属于内核的功能 lo:本地回环 以太网网卡:eth[0-9] pppX RHEL5: /etc/modprobe.conf alias RHEL6: /etc/udev/rules.d/70-persistent-net.ruless.d/

thinkphp备份数据库的方法分享

 这篇文章主要介绍了thinkphp备份数据库的方法分享,非常的简单实用,推荐给有需要的小伙伴们     貌似THINKPHP没有备份数据库的方法,所以我自己写了一个,数据库连接和事务处理用的是pdo,如果有需要的可以联系我,写个mysql或者mysqli的   代码如下: <?php class SqlAction extends Action{ function outsql(){ header("Content-Type:text/html;charset=utf-8″); /*用C

局域网-vmware虚拟机和物理机IP地址的问题

问题描述 vmware虚拟机和物理机IP地址的问题 1C 刚刚通过桥接的方式将虚拟机中的IP地址改为与物理机同一网断内..接着想进入路由器设置界面,结果发现页面不能加载.后来在物理机和虚拟机里各自ipconfig了一下,发现物理机网关为192.168.1.1,而虚拟机为192.168.1.24..是不是此时虚拟机使用的是NAT模式!虚拟机对应的192.168.1.1为net网卡的ip地址.192.168.1.2为NAT网关地址?那么又该如何修改才能让虚拟机与物理机即在同一网段内,又是同一个网关,

CentOS---常用网络配置详解_Linux

一.配置文件详解 在RHEL或者CentOS等Redhat系的Linux系统里,跟网络有关的主要设置文件如下: /etc/host.conf 配置域名服务客户端的控制文件 /etc/hosts 完成主机名映射为IP地址的功能 /etc/resolv.conf 域名服务客户端的配置文件,用于指定域名服务器的位置 /etc/sysconfig/network 包含了主机最基本的网络信息,用于系统启动. /etc/sysconfig/network-script/ 系统启动时初始化网络的一些信息 /e

thinkphp备份数据库的方法分享_php技巧

貌似THINKPHP没有备份数据库的方法,所以我自己写了一个,数据库连接和事务处理用的是pdo,如果有需要的可以联系我,写个mysql或者mysqli的 复制代码 代码如下: <?php class SqlAction extends Action{ function outsql(){ header("Content-Type:text/html;charset=utf-8″); /*用C方法读取数据库配置*/ $host=C('DB_HOST'); $db_name=C('DB_NAM

网络访问攻防战之代理服务器篇

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 在上一篇<网络访问攻防战>中说到,在很多大型企业中和有些国家中,为了限制员工或人民访问某些网站或使用某些网络应用程序,通常做了一些访问限制.限制的方法通常有路由器IP过滤和强制使用代理服务器等几种方式.那么,本篇主要讲述使用代理服务器进行网络访问时的攻防战. 通过代理服务器进行网络访问的很多情况,和直接访问网络的情况十分相