本期是【大厂面试】系列文章。
面试开始
面试官:今天来聊聊代理吧,说说你对代理的理解
大彬:举个例子,大彬准备要创业,但是没有启动资金,于是决定去找老马借钱
大彬:但是大彬跟老马并不熟,吃了个闭门羹,没能借到钱
大彬:经过一番打听消息,原来大彬的好朋友老王是老马的小舅子,于是大彬托老王帮忙去老马那借个500w,最后终于借到了!
大彬:不过老马不知道这钱是大彬借的,老马把钱借给了老王,老王再转交给大彬
大彬:这里的老王就起到代理的作用。在这个过程中,真正借钱的人是谁,老马是不知道的
大彬:而我们常说的代理,其实上指的是正向代理
大彬:从上面的例子可以看到,正向代理隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替去请求
大彬:很多科学上网工具扮演的就是典型的正向代理角色
大彬:比如用浏览器访问google时,访问不同,怎么解决呢?
大彬:可以在国外搭建一台代理服务器,让代理服务器帮我们去请求google,然后代理把请求返回的内容再返回给我们
面试官:既然有正向代理,那也有反向代理吧,说说什么是反向代理?
大彬:嗯,还是举个例子。比如拨打10086,每次都是不同的客服在接听,我们也不需要关心电话那边是谁,只要能够解答问题即可
大彬:这里10086总机号码就是我们说的反向代理。我们作为客户方,不知道真正提供服务的人是谁
大彬:也就是说,反向代理隐藏了真实的服务端
大彬:当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,我们不知道,也不需要知道,只需要知道反向代理服务器是谁就好了
大彬:在这个例子中,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去
大彬:我们常说的Nginx就是性能非常好的反向代理服务器,可以用来做负载均衡
大彬:最后,总结一下,正向代理和反向代理的区别
大彬:它们的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端
面试官:不错,理解的挺到位,今天面试就到这吧
我是@程序员大彬 ,专注Java后端硬核知识分享,欢迎大家关注~