正向代理和反向代理的区别

在了解之前,先思考一下这几个问题:

  • 客户端(手机、网页)展示的数据从哪里来?
  • 什么是代理?
  • 正向代理和反向代理有什么区别?

代理

大家在刷手机的过程中,一定会注意到,如果把wifi或者流量的开关关闭,那么手机里面的短视频、朋友圈、消息都没有办法再去获取新的内容了。这个原因就是因为手机的数据,并非来自手机本身,而是来自一个给它传输数据的地方,我们常常称之为,服务端

好比人和人之间对话,如果双方使用不同的语言,那么是很难理解对方讲话的内容的。

image

在客户端和服务端也是同理,他们需要使用标准的协议来进行通信。
image

而代理,如果想一个生活化的比喻,就像媒人一样,在男女双方未见面之前,会把男方的信息转达给女方,也会把女方的信息知会给男方了解。
image

一般则是网络信息的一个中转站,它会把客户端的信息转发给服务端,也会把服务端的返回信息抓发给客户端。

image

正向代理与反向代理

正向代理

在学生时代,有一个喜欢的人,这是我们的目标,我们会找一个别的同学,他作为我们的代理,然后我们把礼物让这位同学转交给我们喜欢的人。而我们喜欢的这个人,他只能收到礼物,但是不知道到底是谁送他的。

image

那什么是正向代理?正向代理有如下几个特点:

  • 客户端向代理发送一个请求并指定目标(原始服务器)
  • 代理向原始服务器转交请求并将获得的内容返回给客户端
  • 服务器端只知道代理地址不知道客户端ip地址
  • 客户端知道服务端地址,而代理不知道

image

应用场景
  • VPN
  • fiddler

反向代理

到了长大成人之后,没有找到合适对象的我们,又到了一个适婚年龄。渴望爱情、渴望婚姻的我打开一个相亲网站,将我的身份信息,发送给中间的媒人,媒人根据我们提供的条件,帮我们找合适的相亲对象。相亲对象再根据我们的信息选择是否与我们进行下一步约会,在这之前,我并不知道,媒人给我介绍的男生究竟是谁

image

那什么又是反向代理呢?反向代理的特点是:

  • 客户端向代理发送一个请求,但不指定(服务器)目标地址
  • 代理向原始服务器转交请求并将获得的内容返回给客户端
  • 客户端只知道代理地址,但不知道服务端地址
  • 代理需要知道服务端地址

image

应用场景
  • nginx

总结

由这两个图可知,正向代理和反向代理核心的区别就在于

  • 客户端发送请求的时候是否知道服务端的地址
  • 代理是否指定服务端地址

从应用场景考虑:

  • 正向代理:
    • VPN
  • 反向代理:
    • 保护和隐藏原始资源服务器
    • 加密和SSL加速
    • 负载均衡
    • 缓存静态内容
    • 压缩
    • 减速上传
    • 安全
    • 外网发布

为啥正向代理的特点里面有这一条啊?代理替客户端发出请求,为啥代理不知道服务器地址?

反向代理有类似上图「转送礼物」那样的例子吗? :laughing:

你可以认为代理这时候是个转接中心,转接中心只负责把收到的电话号码转播出去,不会记录收到电话号码。换言之,如果客户端不告诉代理服务端地址,代理是不知道的,这个逻辑就等于代理其实它自己本身,是不知道服务端地址的。

1 个赞

补充了哦

相当生动的例子 :joy: :call_me_hand: