HTTP代理模式应用简介

免责声明:内容由作者分享,本文编写由 Jin 代为执笔。

要理解HTTP代理,首先需要理解什么是“代理”?

代理其实就一个代替你办某一件事的过程。

举个例子:你是老板,想喝水了,然后叫秘书帮你倒了一杯水过来。这个秘书代替你完成的过程就可以称为代理了。

HTTP代理

HTTP代理主要分为2种代理:普通代理和隧道代理。

你可能会问:普通代理和隧道代理有什么区别呢?

还是拿上面的例子来说吧。

普通代理例子

1
2
3
4
假如你现在要和某一个客户约个会议,于是跟秘书说:“打电话给XX客户,下午17:00约个会议”。
于是秘书拿起电话打过去,跟XX客户说:“下午17:00约个会议”。
然后XX客户回答说:“OK”。
这时秘书挂了电话,然后跟你说:“OK”。

这就是普通代理,整个过程秘书是完成参与在里面的。

隧道代理例子

1
2
3
4
5
假如你现在要和某一个客户约个会议,于是跟秘书说:“打电话给XX客户”。
于是秘书拿起电话打过去,接通之后,把电话给你。
你跟XX客户说:“下午17:00约个会议”。
然后XX客户回答说:“OK”。
然后XX客户挂了电话后,秘书也从你手上拿走了电话挂掉。

这就是隧道代理,整个过程秘书只负责电话接通和关闭。

普通代理

普通代理是最常见的一种代理模式。

http普通代理

这里的代理服务器就好比你的秘书。

隧道代理

HTTP客户端通过CONNECT方法请求隧道代理创建一条到达任意目的服务器和端口的TCP连接,代理服务器并对客户端和服务器之间的后继数据进行盲转发。

http普通代理

HTTP代理的应用

现在的网络中存在这无数的代理服务器。

  • 我们把针对客户端(client)进行代理(proxy)称之为:正向代理
  • 针对服务器(server)进行的代理(proxy)称之为:反向代理

正向代理

正向代理中,proxy和client同属于一个LAN(局域网),对server透明。

正向代理

比如:你常常使用的“梯子”就是正向代理。

反向代理

反向代理中,proxy和server同属于一个LAN,对client透明。

反向代理

比如:现在很多的服务器都只会暴露接入层机器,并不会暴露真正的服务器。这里的接入层机器就可以被认为是代理服务器。

实际案例

条件是这样的:

  1. 防火墙(只开放80)内的机器A
  2. 防火墙外部的机器B(http隧道服务器)
  3. 防火墙外部的机器C
  4. A,C间无法进行非HTTP通讯

你需要做的就是让A与C能进行正常的数据发送与请求数据。

解决方案:

  1. 机器A上的隧道程序将请求封装为正常的HTTP请求;
  2. 机器B收到报文后,隧道程序将其解析成非HTTP协议请求;
  3. 机器B通过非HTTP协议请求机器C;
  4. 机器C返回非HTTP协议响应机器B;
  5. 机器B隧道程序将响应封装为HTTP响应机器A;
  6. 机器A上的隧道程序将HTTP响应解析为非HTTP协议请求响应。