正向代理与反向代理

  作为一名程序员你肯定听过代理,包括nginx代理模式,正向代理、反向代理,那到底什么正向代理,什么是反向代理呢?偶尔遇到这个问题,我看了网上不少大神的解析,感觉都没说到点,其实代理就是委托某个对象去完成某件事,比喻完成请求处理,当然代理只是代理不干活,而干活的都是处理请求的实体。因此,代理就是委托机制存放的实体。

  代理:

  代理这个概念其实可以和委托关联起来,就是让一个中介帮你做事,所以经常有委托代理这一说法。首先明确不管是正向还是反向,客户端和服务器端都是没任何不同的,也就是一个代理实体委托机制的特性决定了一个代理是正向代理还是反向代理,其实正反代理存在的前提是代理这件事是互相的,因为客户端需要代理,那么服务器就要返回代理结果,他们代表两个不同的方向。其实代理对于请求和处理者来说,只要完成委托即可。

  正向代理:

  正向代理定义非常简单,就是你想访问某个对象,但你没办法直接访问,因此你需要一个代理,把代理当做你要访问的对象,因此你是知道该代理代理的是谁,方向是从请求发起方,指定由谁代理,代理谁,而且服务方无需知道是代理发的还是请求方发的(透明),这样的流程到请求接收方,是正向的,因此叫正向代理,因为这个指定谁的操作的业务非常具体,所以这类代理都是与请求方在同一侧,使得服务方可以不关心谁在请求服务。其实RMI就是正向代理,HeadFirst代理设计模式也是正向代理。

  反向代理:

  反向代理的定义,是相对于正向代理的,其实他们都是做代理这个工作,符合代理这个定义,但是方位是相反的。流程是:请求方发起请求到服务器,但是它并不知道是发给了代理还是发给服务器,而到底给谁处理这个决定因素让代理自己去选择,然后通知服务器,这个时候服务器就知道是谁发的请求,而且是通过代理发的,而无需关心请求者是谁(透明)。反向代理通常的应用场景都是服务器是集群的情况。nginx就是反向代理

  总结:

  正向代理和反向代理和委托这件事相关,当委托的性质不同时,一个代理可以是正向的,也可以是反向的,比喻生产者消费者模型,生产者和消费者都不用关心谁消费和谁生产,如果生产者把消息队列当成消费者代理,而消费者把消息队列当成生产者代理,那么这个代理不是正向代理、也不是反向代理

posted @ 2018-04-21 17:08  饭小胖  阅读(208)  评论(0编辑  收藏  举报