帮助中心

   

热门搜索: 免费续期  推广  永久会员

HTTP直连IP在使用代理IP下无法访问 如何解决

在使用代理IP跟代理服务器连接的时候,会出现各式各样的问题。考虑到域名劫持或DNS解析延迟,有时会直接指定IP地址来请求一个HTTP页面。但是,在无使用代理的情况下,与使用代理的情况下,会出现两种不同的结果。针对这个问题,我们该怎么解决呢?下面从具体的例子来寻找答案。

 

 

比如要访问http://g.tbcdn.cn/s.gif,假设服务端IP为115.238.23.250,指定IP请求该页面时,通常需要做下面的操作:

 

URL改为:http://115.238.23.250/s.gif

设置HTTP请求头部的Host字段为:g.tbcdn.cn

用curl命令来表示,上面的两步操作就是:

curl -H “Host: g.tbcdn.cn” http://115.238.23.250/s.gif

 

下面我们来看看,当采用直连IP访问时,在正常情况和有代理情况下,HTTP报文的具体内容。

 

正常情况:

 

没有代理时,数据流是“client –> server”,采用直连IP访问,客户端发往服务端的HTTP报文内容为:

 

GET /s.gif HTTP/1.1

Host: g.tbcdn.cn

 

服务端收到的报文内容,和通过域名访问的请求没有区别,所以一切正常处理。

 

有代理情况:

 

有代理时,数据流是“client –> proxy –> server”,采用直连IP访问,客户端发往proxy的HTTP报文内容为:

 

GET http://115.238.23.250/s.gif HTTP/1.1

Host: g.tbcdn.cn

proxy收到请求后,认为客户端想访问http://115.238.23.250/s.gif这个页面,按照HTTP代理的功能,重新构造一个HTTP请求发往服务端,报文内容为:

GET /s.gif HTTP/1.1

Host: 115.238.23.250

 

服务端收到的报文内容,Host已经变为IP,对于这种请求,响应什么内容就要看服务端的具体配置,通常会返回404或403,如果该服务端只服务单个域名,也可能不管Host的值,返回正确的页面。

 

总之,这时已经出现问题了,客户端本来是想访问http://g.tbcdn.cn/s.gif>,而服务端认为它想访问。

 

HTTP代理是否一定会修改请求原来的Host内容?

 

这和具体代理软件的实现策略有关,有些做了修改,有些没有,在这种情况下,如果直连IP访问,就可能在某些有代理的网络环境中走不通。

 

解决办法:

 

既然中间代理是这种行为,直连IP访问时,服务端可能会丢失Host信息,我们该如何规避由此产生的问题?

 

以下是一些思路:

 

1、客户端需要做代理检测,有代理时,就不要使用直连IP,直接用原来的域名发标准的HTTP请求。

 

2、客户端和服务端协商好,在HTTP请求头中增加一个特殊字段存放Host信息,服务端做必要的配置,当发现Host是IP时,查看是否有这个特殊字段。

 

3、运营商的WAP代理支持用X-Online-Host请求头来保存域名信息,客户端发HTTP请求时,可以添加这个头部,在WAP网络下能避免丢Host的问题。

 

目前没有找到比较妥善的解决方法,如果有大神成功解决的话,可以将经验分享给大家学习。

关闭
19907977089
关注微信公众号,免费送30分钟时长