当前位置:首页 > 科技  > 软件

我们一起聊聊什么是正向代理和反向代理

来源: 责编: 时间:2024-03-26 09:36:06 282观看
导读从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替我们完成某些任务。在技术领域,这个概念也被

从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。7gp28资讯网——每日最新资讯28at.com

代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替我们完成某些任务。在技术领域,这个概念也被广泛应用,尤其是在计算机网络通信和程序设计中,代理扮演着相当重要的角色,涉及控制访问、安全保护、能力扩展等复杂而强大的方面。7gp28资讯网——每日最新资讯28at.com

网络通信中的代理

在计算机网络中,说到代理,经常会谈到正向代理和反向代理的概念。7gp28资讯网——每日最新资讯28at.com

在详细展开前,我们先使用一个比喻来形象的理解下这两个概念:小明去饭馆吃饭,正向代理就像是小明的朋友帮他去点餐,服务员并不知道最终吃饭的人是小明;而反向代理则像是饭馆的服务员,他们决定把小明的订单送到哪个厨师手里去做。通过这个比喻,我们可以初步感受到正向代理和反向代理在角色和功能上的不同。7gp28资讯网——每日最新资讯28at.com

搞清楚网络通信中的代理和反向代理,大家只要弄明白两件事:你在公司的电脑是怎么访问到外网的,你部署的网站或者API又是怎么被外网访问到的。7gp28资讯网——每日最新资讯28at.com

公司电脑上网

首先看公司电脑上网:公司里的电脑一般不会直接连接到互联网,它们通常在一个内网环境中,这既有成本的考虑,也有安全控制的需要。办公电脑一般会先连接到交换机,交换机再连接到路由器,路由器再连接到互联网。7gp28资讯网——每日最新资讯28at.com

在这些连接中,交换机只是一个小透明,办公电脑可以看到路由器,路由器也可以看到办公电脑,所以交换机不是我们这里所说的代理。7gp28资讯网——每日最新资讯28at.com

这里真正的代理是路由器,办公电脑访问网络时,请求先到达路由器,路由器做个请求来源的登记,记下这个请求是从哪台电脑发出的,然后再发到互联网上。请求出了路由器,互联网上能够看到的就是这个路由器,而看不到你的办公电脑。数据从远程服务器返回时,也是先到达这个路由器,路由器再根据之前做的请求来源登记,将数据转发到对应的办公电脑上。7gp28资讯网——每日最新资讯28at.com

这种场景下,路由器就是一个正向代理,代理内网电脑访问互联网。7gp28资讯网——每日最新资讯28at.com

图片图片7gp28资讯网——每日最新资讯28at.com

除了使用路由器这种比较常见的代理方式,其实还有很多方式,比如在浏览器中配置HTTP代理,只允许通过浏览器访问外网。7gp28资讯网——每日最新资讯28at.com

网站被外网访问

再看网站或者API是怎么被外网访问到的:通常情况下,大家的服务器也是放在内网中的,直接暴露在互联网上会有安全风险,也不利于管理。所以,我们会在服务器和互联网之间设置一个代理服务器,通常是Nginx或者LVS这种负载均衡器。当外网的用户想要访问你的网站或API时,他们的请求首先会发送到这个代理服务器上。7gp28资讯网——每日最新资讯28at.com

这个代理服务器就是一个反向代理。7gp28资讯网——每日最新资讯28at.com

图片图片7gp28资讯网——每日最新资讯28at.com

反向代理服务器接到请求后,它知道内网中哪台服务器能提供这个服务,于是它就把请求转发给对应的服务器。服务器处理完这个请求后,再把结果发送回反向代理服务器,最后由反向代理服务器返回给外网的用户。7gp28资讯网——每日最新资讯28at.com

对比

以上就是计算机网络中正向代理和反向代理的基本原理和应用场景,我们再做一个对比,加深印象。7gp28资讯网——每日最新资讯28at.com

正向代理和反向代理的区别主要体现在它们服务的对象和用途上:7gp28资讯网——每日最新资讯28at.com

对比项7gp28资讯网——每日最新资讯28at.com

正向代理(Forward Proxy)7gp28资讯网——每日最新资讯28at.com

反向代理(Reverse Proxy)7gp28资讯网——每日最新资讯28at.com

服务对象7gp28资讯网——每日最新资讯28at.com

客户端7gp28资讯网——每日最新资讯28at.com

服务器7gp28资讯网——每日最新资讯28at.com

主要用途7gp28资讯网——每日最新资讯28at.com

- 帮助客户端访问无法直接访问的资源7gp28资讯网——每日最新资讯28at.com

- 进行访问控制和缓存以提高速度和安全性7gp28资讯网——每日最新资讯28at.com

- 隐藏服务器真实IP地址7gp28资讯网——每日最新资讯28at.com

- 提供负载均衡功能7gp28资讯网——每日最新资讯28at.com

- 提高服务器访问速度和安全性7gp28资讯网——每日最新资讯28at.com

工作方式7gp28资讯网——每日最新资讯28at.com

- 客户端配置代理服务器,请求先发送至代理服务器7gp28资讯网——每日最新资讯28at.com

- 代理服务器代为访问目标服务器并返回资源给客户端7gp28资讯网——每日最新资讯28at.com

- 客户端请求发送至反向代理服务器7gp28资讯网——每日最新资讯28at.com

- 反向代理服务器根据配置转发请求到内部网络的特定服务器7gp28资讯网——每日最新资讯28at.com

- 从服务器获取响应后返回给客户端7gp28资讯网——每日最新资讯28at.com

举例说明7gp28资讯网——每日最新资讯28at.com

- 使用浏览器设置代理服务器,所有上网请求经由代理服务器访问互联网资源7gp28资讯网——每日最新资讯28at.com

- 根据负载均衡策略将用户请求分发到不同服务器处理7gp28资讯网——每日最新资讯28at.com

简单来说,正向代理是客户端的代理,帮助客户端访问到无法直接获取的资源;反向代理是服务器的代理,帮助服务器平滑处理来自各方的请求。7gp28资讯网——每日最新资讯28at.com

程序设计中的代理

在程序设计中,也有一个代理模式,虽然和网络中的正向代理或反向代理的概念不完全一样,但本质上它们都是代理的概念,都是作为中介提供隔离、隐藏、控制访问和功能增强等作用。7gp28资讯网——每日最新资讯28at.com

Just show me the code! 现在我们用Go来编写一个代理的实例程序,假设我们有一个资源类,我们希望在访问这个资源时,记录访问次数,并在资源不再被引用时自动释放资源。7gp28资讯网——每日最新资讯28at.com

首先,定义一个资源接口Resource和实现这个接口的资源类MyResource:7gp28资讯网——每日最新资讯28at.com

package mainimport (    "fmt")// Resource 接口定义了资源需要实现的方法type Resource interface {    Use()    Release()}// MyResource 是实现了Resource接口的资源类type MyResource struct{}func (r *MyResource) Use() {    fmt.Println("Using MyResource")}func (r *MyResource) Release() {    fmt.Println("Releasing MyResource")}

然后,定义一个代理的类 ResourceProxy,它包含了对资源的引用和引用计数,同时它也实现了Resource接口。7gp28资讯网——每日最新资讯28at.com

// ResourceProxy 是代理的结构体,包含资源和引用计数type ResourceProxy struct {    resource Resource    refCount int}// NewResourceProxy 是ResourceProxy的构造函数func NewResourceProxy(resource Resource) *ResourceProxy {    return &ResourceProxy{resource: resource, refCount: 1} // 初始引用计数为1}// Use 方法增加引用计数并使用资源func (sr *ResourceProxy) Use() {    sr.refCount++    fmt.Printf("Resource is used %d times/n", sr.refCount)    sr.resource.Use()}// Release 方法减少引用计数,当计数为0时释放资源func (sr *ResourceProxy) Release() {    sr.refCount--    if sr.refCount == 0 {        sr.resource.Release()    } else {        fmt.Printf("Resource is still used by %d references/n", sr.refCount)    }}

最后我们使用这个代理:7gp28资讯网——每日最新资讯28at.com

func main() {    resource := &MyResource{}    proxyRef := NewResourceProxy(resource)    proxyRef.Use() // 使用资源,引用计数增加    proxyRef.Release() // 释放一次引用,引用计数减少到0,资源被释放    // Output:    // Resource is used 1 times    // Using MyResource    // Releasing MyResource}

这个简单的例子演示了代理在资源管理中的应用,可以根据实际需要添加更多复杂的逻辑,比如错误处理、同步控制、日志记录等。7gp28资讯网——每日最新资讯28at.com

在程序设计中,代理模式是一种结构型设计模式,它让我们能提供一个替代品来代表另一个对象,这个替代品控制着对原对象的访问,可以在访问原对象前后进行一些额外处理。7gp28资讯网——每日最新资讯28at.com

通过上边的示例,我们可以发现代理模式的三个主要角色:7gp28资讯网——每日最新资讯28at.com

  • 抽象主题(Subject):定义了代理和真实主题的共用接口,这样在任何使用真实主题的地方都可以使用代理。
  • 真实主题(Real Subject):实现了抽象主题的具体类,代表了实际的对象,是最终要使用的对象。
  • 代理(Proxy):包含对真实主题的引用,控制着对真实主题的访问,并可能负责创建和删除它。通常会做一些额外的事情来实现自己的价值。

在代码实际实现时,代理模式其实有多种不同的实现,包括:7gp28资讯网——每日最新资讯28at.com

  • 远程代理(Remote Proxy):为一个对象在不同的地址空间(通常是不同计算机上的服务)提供局部代表。常见的如RPC、gRPC等,通过本地代理对象,客户端可以像调用本地接口一样访问远程服务,而无需关心网络通信的细节。
  • 虚拟代理(Virtual Proxy):通过它来存放实例化需要很长时间的真实对象。常见的就是懒加载,比如加载一个大文件或者从数据库中读取大量数据,我们不希望在程序启动时就立刻加载,而是希望在真正需要这些数据的时候才去加载它们。
  • 保护代理(Protection Proxy):控制对原始对象的访问。用于对象应该有不同访问权限的时候。
  • 智能引用(Smart Reference):当对象被引用时,提供一些额外的操作,比如计算对象被引用的次数。上边提供的代码示例就是一个智能引用的例子。

这里就不展示更多的代码了,关键是在合适的时机使用恰当的代理模式来解决问题,这需要细细体会。7gp28资讯网——每日最新资讯28at.com

做个简单的小结,代理模式就像程序中的一个“中间人”,在不需要直接访问某个对象,或者直接访问某个对象不太方便或者不符合需求时,代理模式提供了一个非常灵活的解决方案。7gp28资讯网——每日最新资讯28at.com

正如本文所探讨的,代理模式在网络通信和程序设计中都扮演着重要的角色。它通过提供一个中间层,增强了系统的安全性、灵活性和可维护性。掌握代理,我们就拥有了在合适的场景下解决问题的一种强大能力。希望本文的讨论能对你有一点用处。7gp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-79300-0.html我们一起聊聊什么是正向代理和反向代理

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 实用干货:El-input 各种输入限制的正则整理

下一篇: G行基于OpenSearch的日志平台设计与实践

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 机构称Q2全球智能手机出货量同比下滑11% 苹果份额依旧第2

    7月20日消息,据外媒报道,研究机构的报告显示,由于需求下滑,今年二季度全球智能手机的出货量,同比下滑了11%,三星、苹果等主要厂商的销量,较去年同期均有下
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top