java面试题之个人对正向代理和反向代理的理解

简介: java面试题之个人对正向代理和反向代理的理解

为什么使用代理?

提高响应速度:

因为我们发送给代理服务器的请求,目标主机(真正的服务器)返回的数据会储存在代理服务器主机的硬盘上,当下一次同样的请求访问时,直接从硬盘读取,加快访问速度,尤其是对一些静态资源较多的电商网站效益明显。

充当一个防火墙的作用:

一个服务器既当作业务机又当作运维机很明显压力是很大的,此时使用代理服务器把不正当的请求和某些不安全的信息过滤掉,这样业务目标主机就省去了很多业务,两台服务器同时工作肯定是比一台强很多的。

突破访问限制:

也就是平常说的翻墙,访问我们访问不到的站点,就拿国内的谷歌来说吧,国内不是访问不到嘛,但是国外比如说美国韩国就可以访问到,但是我们也可以访问到韩国的某个站点,那中国人多啊,少了咱们中国人谷歌赚的不多吧,于是谷歌想了一个办法,建立一个或多个代理服务器,用来访问它自己的目标主机,也就是谷歌网站,再把代理服务器的地址给我们去访问,这样就突破了访问限制。

代理分几种?

两种:正向代理和反向代理

说说对正向代理的理解吧:

正向代理,英文是forward proxy,一个介于用户客户端与目标主机服务器端的服务器,客户端向代理服务器发送一个目标性的请求(我要访问哪哪哪),代理服务器转发客户端的请求给目标主机服务器,然后将目标主机服务器的结果返回给客户端,我们一般说的代理都是正向代理,这就是我对正向代理的理解。

说说什么是反向代理?

反向代理,英文是 reverse proxy,之所以叫反向代理,是因为正向代理是有目的性的去访问目标主机服务器的代理服务器,而反向代理是用户不知道代理服务器的存在下,直接访问目标主机服务器的站点,而目标主机中间多了一个代理服务器,同正向代理一样,转发客户端请求给目标主机服务器,然后返回结果给用户端,用户看起来没有什么差异,以为自己访问了目标主机,实际上不是。

你说了这么多,说说他俩的不同之处吧:

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

一个是用户向代理服务器发送的请求,一个是用户直接请求的目标主机,虽然都是代理服务器转发请求,但是用户看来是不一样的。

也是同上边所说的一样,正向代理服务器不知道真正是谁发的请求,反向代理服务器是用户不知道真正访问了哪个服务器。

两个代理服务器所存放的位置也不一样,正向代理服务器是专门来转接请求的,这点用户是直到的,所以用户直接访问代理服务器,用户希望代理服务器转交他的内容,因此正向代理服务器是放在用户与目标主机中间的。

与正向代理服务器不同,反向代理是用来保护目标主机服务器的,用户只知道自己访问了一个站点,并不知道是不是代理服务器,而代理服务器都是放在目标主机服务器端上的,通常都是使用第三方的反向代理服务器,目前用的最多的应该就是ngnix,ngnix可以帮助目标主机服务器做负载均衡,缓存等等,提高网站的访问速度。百度啦,淘宝啦,京东等都在用。

目录
打赏
0
3
3
0
40
分享
相关文章
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
56 15
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
173 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
75 13
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
143 9
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
133 16
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
232 60
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
116 12
Java MyBatis 面试题
Java MyBatis相关基础面试题
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
Java Dubbo 面试题
Java Dubbo相关基础面试题