反向代理是什么意思?正向代理和反向代理的区别是什么?

article/2025/9/4 19:15:17

一文说清楚正向代理与反向代理的区别

什么是正向代理?什么是反向代理?它们的区别是什么?看完本文就清楚了…

首先,从字面上理解,代理的意思是代替办理,就是一方委托另一方办事,在计算机网络的世界里,代理通常是指客户端与服务端之间的中介。

计算机网络中的代理又分为正向代理和反向代理,正向代理很简单,就是客户端不直接访问服务端,而是通过一个中间人访问(中间人先代替客户端向服务端获取到数据,再将获取到的数据返回给客户端),很容易理解吧,那很多人会问,为什么客户端要“脱了裤子放屁”,不直接访问服务端呢?通常有两种原因:

1.因某些你懂的原因,客户端所在网络限制访问服务端了;
2.因某些特殊原因,服务端不允许某些来源的客户端访问。

举个粟子:A村子和B村子关系不好,所以A村设了限制,不允许A村民去B村小卖部买玉米,或者B村子小卖部不卖玉米给A村民。但A村民又想要B村子小卖部玉米,那怎么办呢?A村民可以委托C村子的人代替自己去B村子买东西,带回来后再交给自己,这就是正向代理。示意图如下:
在这里插入图片描述

图片来源:自己画的

这种结构的特点是:服务端不知道自己的真正客户是谁,它接触的客户是代理,但客户是知道真正提供服务的是谁(是B小卖部而非代理),正向代理是客户端无法直接访问(或想匿名访问)服务端的解决方案, 委托方是客户端!

而关于反向代理,很多人都觉得难以理解,因为正常的思维,既然正向代理是客户端向服务端获取数据的中介,那反向很自然就应该是服务端向客户端获取数据的中介了,然鹅事实并非如此,他们是有很大差别的,这是理解的难点。先来看一下下面这张图:
在这里插入图片描述

图片来源:自己画的

B村有很多村民都生产玉米(假设生产的玉米是无差别的),但分别单独对外售卖玉米很麻烦,因为客户不知道哪家有,也不清楚哪家的量有多少,所以他们全部委托给B村小卖部销售(注意: 委托方是服务端!),由小卖部统一对外服务。买玉米的客户不清楚玉米是哪家的,只管直接向小卖部购买就可以了,这就是反向代理。

这种结构的特点是:客户端不知道谁是真正的服务端(供应商),反向代理往往会根据一定的策略将请求转发到最合适的服务器处理,例如按服务器闲忙情况分配,咦,听起来是不是很像负载均衡的策略?没错,反向代理经常应用于实现负载均衡场景,Nginx等Web服务器支持反向代理功能并被广泛应用于实现负载均衡。

总的来说:所以虽然这两种代理方式名字相近,但目的及应用场景上天差地别:

  • 从功能来看:
    正向代理是客户端不能(不便)直接访问服务端的解决方案
    反向代理是多个服务端统一对外提供服务的解决方案
  • 从目标客户角度看
    正向代理的委托方是客户端,代理向客户端(单次是1个)提供服务
    反向代理的委托方是服务端,代理向多个(通常是多个,也可以单个)服务端提供服务
  • 从可见性的角度来看
    正向代理对客户端可见,是客户端主动选择的结果(可选可不选,服务端只能被动选择),客户端可以选择直接访问(是否能访问得到是另一回事),也可以选择通过代理访问
    反向代理对客户端不可见,是客户端被动选择的结果(是服务端主动选择的结果),意思是:客户端是不知道目前访问的服务是否使用了反向代理的

PS:有时候,这两种代理方式会在一次网络请求中并存,如下图所示:
在这里插入图片描述

*图片来源:自己画的*

大家各司其职,是完全没有冲突的

小伙伴看懂了吗?


http://chatgpt.dhexx.cn/article/4VVxps8q.shtml

相关文章

正向代理和反向代理有什么区别?什么是正向代理?什么是反向代理?正向代理和反向代理详解。

一、正向代理: 当用户想访问某一网址时,用户先访问代理服务器,然后由代理服务器向目标网址发送请求最终将数据返回代理服务器,最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 正向代理它代理了客户端,相…

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

套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术。常用的代理技术分为正向代理、反…

详解正向代理与反向代理

1.正向代理 1.1 概念 正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求&#xff0…

二叉树-翻转二叉树

题目 思路BFS 使用BFS遍历的时候交换 只需要对原有的BFS遍历时加上交换的代码即可(老三行)。 public TreeNode invertTree(TreeNode root) {public TreeNode invertTree(TreeNode root) {//root为空的情况要进行排除否则会在交换时出现空指针异常if(r…

力扣周赛 313 反转二叉树的奇数层(dfs镜像遍历 or bfs提取层节点)

题意: 对于一颗给定的二叉树,我们的任务是反转它的所有奇数层的节点的权值 val(根节点所在层为第 0 层),操作完后返回根节点 root。 思路: 思路一: dfs 镜像遍历:左子树按照左中…

二叉树左右子树的翻转

翻转一个二叉树,直观上看,就是把二叉树的每一层左右顺序倒过来。比如问题中的例子,第三层1-3-6-9经过变换后变成了9-6-3-1,顺序反过来就对了。 再仔细观察一下,对于上面的例子,根节点(root&…

算法-树-反转二叉树

问题 Write a function that takes in a Binary Tree and inverts it. In other words, the function should swap every left node in the tree for its corresponding (mirrored) right node. Each Binary Tree node has a value stored in a property called “value” and …

算法_二叉树_翻转二叉树

文章目录 翻转二叉树1.解法2.总结算法 翻转二叉树 leetcode链接 1.解法 解法思路: 想把二叉树翻转,其实仔细一看,就是把每个二叉树的节点的左右孩子翻转,这样总体效果就是把整个二叉树翻转了。 所以只需要通过一种遍历手段把…

Java 求解翻转二叉树

文章目录 一、题目二、题目分析三、递归法四、非递归法五、层序遍历六、总结一、题目 翻转一棵二叉树。 二、题目分析 题目要求翻转二叉树,其实只需要把每一个节点左右孩子交换(孩子下面的节点是一起交换的)即可 题目使用前序遍历和后序遍历都可,但是中序遍历不可以,因…

【LeetCode 6182 反转二叉树的奇数层】

题目描述 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] ,那么反转后它应该变成 [18,29,11,7,4,3,1,2] 。反转后,返回树的根节点。 完美 二叉…

js 反转二叉树

什么是反转二叉树 二叉树的每个结点至多有两颗子树,不存在大于2个的节点,二叉树有左右之分,次序不能颠倒 初始数据 let list {id: "4",left: {id: "2",left: {id: "1",left: null,right: null,},right: {id: …

层序遍历,反转二叉树,对称二叉树

1.层序遍历 leetcode 一层层遍历二叉树 &#xff0c; 是广度优先搜索 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {queue< TreeNode* > que;vector < vector < int > > result;if ( root NULL ) return result…

力扣226:反转二叉树

翻转二叉树 题目思路①思路①代码思路②思路②代码总结 题目 给你一颗二叉树的根节点root&#xff0c;请你翻转该二叉树&#xff0c;并且返回其根节点。 思路① 如何判定二叉树是否翻转&#xff1f; 左右子树需要交换&#xff0c;左右子树内部的左右子节点也需要交换位置。…

翻转二叉树-python

leetCode第226题 翻转二叉树 链接&#xff1a;https://leetcode-cn.com/problems/invert-binary-tree 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,…

iOS实现反转二叉树(前序遍历二叉树)

题目: Input: Output: 首先分析下这个二叉树,从上往下看发现这个树是把树上的数据进行了交换,但是仔细一看发现最后一排的1-3反转过去后变成了3-1.所以得出结论,这道题是左右子树进行了交换,用函数递归就能很容易实现了. ## OC版本 声明节点属性&#xff1a; #import &…

二叉树翻转实例

1.问题描述 Invert a binary tree.For example: to Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off. 问题来源于Leetcode https://leetcode.com/problems/invert-binary-tree/ 2.问题…

LeetCode 2415. 反转二叉树的奇数层

2415. 反转二叉树的奇数层 【DFS】这个和对称二叉树一样&#xff0c;也是用一个双节点参数的函数来遍历这棵二叉树&#xff0c;在遍历的过程中交换左右两个节点的值即可。 class Solution {// 10:57 5 // dfsvoid dfs(TreeNode left, TreeNode right, int t) {if (left null)…

反转二叉树(二叉树的镜像)

输入一个二叉树&#xff0c;输出其镜像。 如下图&#xff0c;即交换所有节点的左右子树。 这里提供两种思路&#xff1a;使用递归和不使用递归。 使用的二叉树定义如下&#xff1a; public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeN…

二叉树反转java实现

项目github地址&#xff1a;bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star&#xff0c;留言&#xff0c;一起学习进步 反转二叉树是数据结构中一种经典的操作。如下图所以&#xff0c;反转二叉树就是交换所有节点的左右子树。 具体代码实现如下&#xf…

二叉树的翻转

目录 一、题目 二、解题思路 1、二叉树翻转 2、具体步骤&#xff08;迭代法&#xff09; 三、代码实现 一、题目 1、leetcode链接&#xff1a;力扣 2、题目内容&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&a…