77-http-27-正向代理和反向代理

概述

Web 上的代理服务器是代表客户端完成事务处理的中间人。如果没有 Web 代理, HTTP 客户端就要直接与 HTTP 服务器进行对话。有了 Web 代理,客户端就可以与代理进行对话,然后由代理代表客户端与服务器进行交流。客户端仍然会完成对事务的处理,但它是通过代理服务器提供的优质服务来实现的。

HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。HTTP 客户端会向代理发送请求报文,代理服务器必须像 Web 服务器一样,正确地处理请求和连接,然后返回响应。同时,代理自身要向服务器发送请求,这样,其行为就必须像正确的 HTTP 客户端一样,要发送请求并接收响应。如果要创建自己的 HTTP 代理,就要认真地遵循为 HTTP 客户端和 HTTP 服务器制定的规则。

类比学习

点餐

没有代理

假如餐厅是厨师自己开的,厨师自己做饭提供给客户,我们下单,然后厨师把饭提供给我们。

我们是客户端,厨师是服务端,没有代理

正向代理

假如餐厅中有一名厨师,和一名服务员,我们下单告诉服务员,服务员告诉厨师,厨师做好饭后交给服务员,服务员端给我们。

我们是客户端,服务员是正向代理,厨师是服务端。

在这个过程中,服务员代替我们去告诉厨师想要吃的饭,厨师只知道服务员,并不知道最终吃饭的人是谁。

反向代理

假如餐厅中有一名服务员,下单系统,和多名厨师,我们下单告诉服务员,服务员在下单系统上提交菜品,下单系统按照忙闲情况分配了厨师。

我们是客户端,服务员是正向代理,下单系统是反向代理,厨师是服务端

在这个过程中,我们只知道是在下单系统上提交的订单,但是不知道是哪位厨师提供的

借钱

假设由A、B和C三人,他们之间存在借钱的关系。

正向代理

  1. A需要钱,A知道C由很多钱,想向C借钱
  2. 但是A和C有矛盾,于是A想到通过B去借C借钱
  3. B向C借到钱了,C不知道是A的存在
  4. 这样B就帮助A借到了Z的钱

在这个过程,B就充当了代理借钱的角色,并且是代替A去借钱的,这样就是正向代理。

反向代理

  1. A需要钱,C有很多钱,A不知道C很多钱
  2. A找B借钱
  3. B知道C有很多钱
  4. B向C借钱,并把借到的钱给A,而没有使用自己的钱借给A
  5. A拿到钱以后,以为钱是B的,A不知道C的存在

在这个过程当中,B也充当了代理借钱的角色,不过这次不是代替A去借的,而是用C的钱借给A的,换言之即是代替C将钱借给了A,这就是反向代理。

其他

正向代理: 买票的黄牛

反向代理: 租房的代理

正向代理

是指是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容, 客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

特点

  1. 代理客户;
  2. 隐藏真实的客户,为客户端收发请求,使真实客户端对服务器不可见;
  3. 一个局域网内的所有用户可能被一台服务器做了正向代理,由该台服务器负责 HTTP 请求;
  4. 意味着同服务器做通信的是正向代理服务器;

作用

  1. 访问原来无法访问的资源,如google
  2. 可以做缓存,加速访问资源
  3. 对客户端访问授权,上网进行认证
  4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

特点

  1. 代理服务器;
  2. 隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见;
  3. 负载均衡服务器,将用户的请求分发到空闲的服务器上;
  4. 意味着用户和负载均衡服务器直接通信,即用户解析服务器域名时得到的是负载均衡服务器的 IP ;

作用

  1. 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
  2. 负载均衡,通过反向代理服务器来优化网站的负载

总结

共同点

  1. 都是做为服务器和客户端的中间层
  2. 都可以加强内网的安全性,阻止 web 攻击
  3. 都可以做缓存机制,提高访问速度

区别

  1. 正向代理其实是客户端的代理,反向代理则是服务器的代理。
  2. 正向代理中,服务器并不知道真正的客户端到底是谁;而在反向代理中,客户端也不知道真正的服务器是谁。
  3. 作用不同。正向代理主要是用来解决访问限制问题;而反向代理则是提供负载均衡、安全防护等作用。

图解

参考

如何向老板解释反向代理

知乎-慕课网