两分钟掌握正向代理和反向代理

本期是【大厂面试】系列文章。

面试开始

面试官今天来聊聊代理吧,说说你对代理的理解

大彬:举个例子,大彬准备要创业,但是没有启动资金,于是决定去找老马借钱

大彬:但是大彬跟老马并不熟,吃了个闭门羹,没能借到钱

大彬:经过一番打听消息,原来大彬的好朋友老王是老马的小舅子,于是大彬托老王帮忙去老马那借个500w,最后终于借到了!

大彬:不过老马不知道这钱是大彬借的,老马把钱借给了老王,老王再转交给大彬

大彬:这里的老王就起到代理的作用。在这个过程中,真正借钱的人是谁,老马是不知道的

大彬:而我们常说的代理,其实上指的是正向代理

大彬:从上面的例子可以看到,正向代理隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替去请求

大彬:很多科学上网工具扮演的就是典型的正向代理角色

大彬:比如用浏览器访问google时,访问不同,怎么解决呢?

大彬:可以在国外搭建一台代理服务器,让代理服务器帮我们去请求google,然后代理把请求返回的内容再返回给我们

面试官既然有正向代理,那也有反向代理吧,说说什么是反向代理?

大彬:嗯,还是举个例子。比如拨打10086,每次都是不同的客服在接听,我们也不需要关心电话那边是谁,只要能够解答问题即可

大彬:这里10086总机号码就是我们说的反向代理。我们作为客户方,不知道真正提供服务的人是谁

大彬:也就是说,反向代理隐藏了真实的服务端

大彬:当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,我们不知道,也不需要知道,只需要知道反向代理服务器是谁就好了

大彬:在这个例子中,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去

大彬:我们常说的Nginx就是性能非常好的反向代理服务器,可以用来做负载均衡

大彬:最后,总结一下,正向代理和反向代理的区别

大彬:它们的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端

面试官:不错,理解的挺到位,今天面试就到这吧

我是@程序员大彬 ,专注Java后端硬核知识分享,欢迎大家关注~