有代理时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的问题。
相关文章
|
1月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
2月前
|
缓存 JavaScript 前端开发
对比PAC代理与传统HTTP代理的不同
总结起来,PASSIVE 提供了基础且广泛兼容解决方案而PASSIve 则提供高级灵活控制满足特殊需求但同时也带来了额外维护负担及潜再技术挑战
249 4
|
3月前
|
数据采集 负载均衡 监控
巨量http,全民ip,芝麻http,太阳http,天启代理,大麦代理,2025最新测评隧道代理选谁?
隧道代理通过云端自动切换IP,简化了传统代理的复杂操作,成为数据采集、广告监测等领域的高效工具。本文解析其工作原理,探讨选型要点,助你找到最适合的方案。
|
4月前
|
Go 定位技术
Golang中设置HTTP请求代理的策略
在实际应用中,可能还需要处理代理服务器的连接稳定性、响应时间、以及错误处理等。因此,建议在使用代理时增加适当的错误重试机制,以确保网络请求的健壮性。此外,由于网络编程涉及的细节较多,彻底测试以确认代理配置符合预期的行为也是十分重要的。
244 8
|
6月前
|
数据采集
Haskell编程中,利用HTTP爬虫实现IP抓取
以上就是利用Haskell编写IP抓取爬虫的详细步骤。希望这篇文章的演示对于理解在Haskell这种函数式编程语言中如何实现网络爬虫有所帮助,而其中的网络访问、标签解析和列表处理等技术在许多其他的问题中都有广泛的应用。
156 26
|
5月前
|
存储 缓存 前端开发
http协议调试代理工具,Fiddler免费版下载,抓包工具使用教程
Fiddler是一款功能强大的HTTP协议调试代理工具,能记录并检查电脑与互联网间的HTTP通信,支持断点设置和数据编辑。相比其他网络调试器,Fiddler操作更简单且用户友好,支持查看Cookie、HTML、JS、CSS等文件内容。它还具备HTTPS抓包、过滤设置、统计页面总重量等功能,适用于安全测试与功能测试。通过插件扩展,用户可自定义视图或分析缓存行为。支持多种HTTP请求方法(如GET、POST等)及状态码分类(1xx-5xx),是开发者调试网络请求的得力工具。同类工具有HttpWatch、Firebug、Wireshark等。
540 1
|
6月前
|
安全 网络协议 算法
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
本文系统探讨了构建企业级双协议隧道代理系统的挑战与实现。首先对比HTTP/HTTPS和SOCKS5协议特性,分析其在工作模型、连接管理和加密方式上的差异。接着提出兼容性架构设计,包括双协议接入层与统一隧道内核,通过协议识别模块和分层设计实现高效转换。关键技术部分深入解析协议转换引擎、连接管理策略及加密传输方案,并从性能优化、安全增强到典型应用场景全面展开。最后指出未来发展趋势将更高效、安全与智能。
246 1
|
Web App开发 前端开发 Android开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。
924 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
系统的升级涉及各个架构组件,细节很多。常年累月的修修补补使老系统积累了很多问题。 系统升级则意味着需要repair之前埋下的雷,那为何还要升级,可以考虑以下几个方面 成熟老系统常见问题: 1. 缺乏文档(这应该是大小公司都存在的问题。
703 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operation not perm...
1066 0

热门文章

最新文章