在了解之前,先思考一下这几个问题:
- 客户端(手机、网页)展示的数据从哪里来?
- 什么是代理?
- 正向代理和反向代理有什么区别?
代理
大家在刷手机的过程中,一定会注意到,如果把wifi或者流量的开关关闭,那么手机里面的短视频、朋友圈、消息都没有办法再去获取新的内容了。这个原因就是因为手机的数据,并非来自手机本身,而是来自一个给它传输数据的地方,我们常常称之为,服务端。
好比人和人之间对话,如果双方使用不同的语言,那么是很难理解对方讲话的内容的。
在客户端和服务端也是同理,他们需要使用标准的协议来进行通信。
而代理,如果想一个生活化的比喻,就像媒人一样,在男女双方未见面之前,会把男方的信息转达给女方,也会把女方的信息知会给男方了解。
一般则是网络信息的一个中转站,它会把客户端的信息转发给服务端,也会把服务端的返回信息抓发给客户端。
正向代理与反向代理
正向代理
在学生时代,有一个喜欢的人,这是我们的目标,我们会找一个别的同学,他作为我们的代理,然后我们把礼物让这位同学转交给我们喜欢的人。而我们喜欢的这个人,他只能收到礼物,但是不知道到底是谁送他的。
那什么是正向代理?正向代理有如下几个特点:
- 客户端向代理发送一个请求并指定目标(原始服务器)
- 代理向原始服务器转交请求并将获得的内容返回给客户端
- 服务器端只知道代理地址不知道客户端ip地址
- 客户端知道服务端地址,而代理不知道
应用场景
- VPN
- fiddler
反向代理
到了长大成人之后,没有找到合适对象的我们,又到了一个适婚年龄。渴望爱情、渴望婚姻的我打开一个相亲网站,将我的身份信息,发送给中间的媒人,媒人根据我们提供的条件,帮我们找合适的相亲对象。相亲对象再根据我们的信息选择是否与我们进行下一步约会,在这之前,我并不知道,媒人给我介绍的男生究竟是谁。
那什么又是反向代理呢?反向代理的特点是:
- 客户端向代理发送一个请求,但不指定(服务器)目标地址
- 代理向原始服务器转交请求并将获得的内容返回给客户端
- 客户端只知道代理地址,但不知道服务端地址
- 代理需要知道服务端地址
应用场景
- nginx
总结
由这两个图可知,正向代理和反向代理核心的区别就在于
- 客户端发送请求的时候是否知道服务端的地址
- 代理是否指定服务端地址
从应用场景考虑:
- 正向代理:
- VPN
- 反向代理:
- 保护和隐藏原始资源服务器
- 加密和SSL加速
- 负载均衡
- 缓存静态内容
- 压缩
- 减速上传
- 安全
- 外网发布