有代理时HTTP直连IP可能走不通

简介: 考虑到域名劫持或DNS解析延迟,有时会直接指定IP地址来请求一个HTTP页面,但这种访问方式,在某些代理网络的环境中能走不通。

考虑到域名劫持或DNS解析延迟,有时会直接指定IP地址来请求一个HTTP页面。

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

  1. URL改为:http://115.238.23.250/s.gif
  2. 设置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信息,我们该如何规避由此产生的问题?

没有特别好的办法,一些想法如下:

  • 客户端需要做代理检测,有代理时,就不要使用直连IP,直接用原来的域名发标准的HTTP请求。
  • 客户端和服务端协商好,在HTTP请求头中增加一个特殊字段存放Host信息,服务端做必要的配置,当发现Host是IP时,查看是否有这个特殊字段。
  • 运营商的WAP代理支持用X-Online-Host请求头来保存域名信息,客户端发HTTP请求时,可以添加这个头部,在WAP网络下能避免丢Host的问题。
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
1月前
|
安全 Linux 网络安全
Linux使用HTTP隧道代理代码示例模版
Linux使用HTTP隧道代理代码示例模版
19 0
|
6天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
6天前
|
数据采集 Python
数据采集时使用HTTP代理IP效率不高怎么办?
数据采集时使用HTTP代理IP效率不高怎么办?
|
7天前
|
缓存 安全 定位技术
国外HTTP代理如何解决账号关联问题?
跨境电商面临多账号关联难题,可能导致平台限制或封禁。HTTP代理成为解决方案,提供独立IP避免账号关联,确保地理位置符合平台要求,实现IP隔离,增强安全性和隐私。通过代理,每个账户在不同环境中操作,减少被平台检测为违规的风险,同时防止黑客攻击,保障商家销售和品牌声誉。
|
8天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
1月前
|
JSON JavaScript 网络安全
新款HTTP代理工具Proxyman(界面美观、功能强大)
新款HTTP代理工具Proxyman(界面美观、功能强大)
111 0
|
1月前
|
存储 数据采集 负载均衡
建立HTTP代理IP池的技术和工具支持
建立HTTP代理IP池的技术和工具支持
45 0
|
1月前
|
数据采集 缓存 监控
Socks5 与 HTTP 代理在网络安全中的应用
Socks5 与 HTTP 代理在网络安全中的应用
12 0
|
3月前
|
Python
pytho3 urllib urllib3 获取本地ip地址和mac地址发送post到指定http服务器
pytho3 urllib urllib3 获取本地ip地址和mac地址发送post到指定http服务器
32 0