代理到底是怎么一回事

前言

在我们做项目的时候,本地运行发现前端请求的地址与后端接口提供的地址并不一致,这时候就有人说,你做个代理就可以解决这个问题了。那么代理是什么,是怎么解决地址不一样还能请求到后端呢?

同源策略

当我们请求的地址与目标服务器的地址不一样会请求失败,是因为浏览器对 javascript 实施的安全限制,不允许非同源的 URL 之间进行资源的交互,当不同源的时候会把当前请求拦截掉,表示该请求为跨域请求,那么怎么判断为不同源呢?

跨域

当协议、域名/IP、端口只要有一个不一样就为跨域,例如 http://localhost:3000/ , http 部分为协议,localhost 部位为域名或者 IP 地址,3000 为端口。

代理

那么为了解决跨域问题,可以使用代理来解决这个问题。当我们所发送的请求都会由代理服务器代为转发,而代理服务器的地址与当前使用的地址一致,便解决了跨域问题,可以请求到目标服务器拿到数据。

而代理也有正反之分

  • 正向代理 代理服务器代理代替客户端,去和目标服务器进行请求交互,即代理客户端。例如 vue 中的 proxy 代理
  • 方向代理 代理服务器代理目标服务器,去和客户端进行交互,即代理服务端。例如 nginx 进行反向代理

正向代理

正向代理是为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。

在 vue 的项目中,我们可以这样进行代理设置:在项目根目录下有 vue.config.js 这么一个文件,在里面可以进行一些项目的配置,这里去进行代理,去到 proxy 进行配置。

  • proxy 属性是用于配置代理的规则,它是一个对象,可以配置多个代理规则对象,其中对象的键值为需要代理的接口路径
  • target 表示代理的目标服务器地址
  • changeOrigin 表示是否改变请求的源地址
  • pathRewrite 用于重写请求的路径,如果后台接口包含这个前缀的话,就不用重写
js 复制代码
proxy: {
'/api': {
    target: 'http://192.168.0.111',
    changeOrigin: true,
    secure: false,
    pathRewrite: {
        '^/api': ''
    }
  },
}

在 vue.config.js 文件中配置的代理只是解决了开发环境中的跨域,到时候上线了如果还是要进行跨域请求的话,就可以使用 nginx 进行反向代理

反向代理

反向代理 是指以代理服务器来接收客户端上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器返回的内容返回给请求连接的客户端。

其实就是为服务器服务的,可以帮助服务器接收客户端的请求,帮助服务器做请求转发,负载均衡、防范攻击、缓存等。

  • 防范攻击,为了服务器的安全,不允许用户直接请求解除到真实服务器,任何的访问都要先到代理服务器,由代理服务器进行验证、过滤白名单等操作,符合条件的才会转发到真实服务器
  • 负载均衡,当一个网站访问的人数过多的时候,服务器承受的请求压力会很大,这时候需要添加多个服务器来承受这些请求,然后在这些服务器前面添加代理服务器,做负载均衡,用户请求先到代理服务器,让它来决定请求转发给对应的服务器
  • 缓存,当反复跳转重复请求同一个内容的时候,内容是一样的,但是每次都要请求到服务器上,会占用服务器资源,这时候可以让代理服务器承担这工作,将一些重复、常用的内容缓起来,当请求到这些资源时,就可以直接返回给用户,不必转发给服务器,减轻服务器的压力

nginx

nginx 是一个高性能的HTTP和反向代理服务器,它是整个项目的代理,不同于 vue 中的 proxy 只是一个接口的代理。

首先需要去下载 nginx

js 复制代码
// nginx 基本配置结构
events{
	
}
http{
	server{
		location path
		{
			...
		}
		location path
		{
			...
		}
	}
	server{
		...
	}
}

一个 http 可以配置多个 server

js 复制代码
server{ 
    listen 80; 
    server_name pc.server.com; 
    location /{ 
        proxy_pass hd.server.com; 
    } 
}
  • listen 用来监听端口
  • server_name 前端的域名
  • proxy_pass 后端服务的域名

当访问到 pc.server.com 就会转发给 hd.server.com 去处理

结论

代理可以让我们对目标的访问控制,并且可以在其中增加额外的功能,在解决跨域问题的时候就可以使用代理,去控制请求的访问,并且代理分为正向代理和反向代理,正向代理为代理客户端,反向代理为代理服务器。代理能来帮助我们更好更快的完成项目的开发和部署。

相关推荐
噢,我明白了36 分钟前
表单的完整 CRUD 练习【极简个人记账本】(含前端后端链接mySQL)
java·前端·数据库·mysql
幽络源小助理39 分钟前
MacCMSPro版视频影视系统源码_全开源高可用视频平台解决方案
前端·php·php源码
不会敲代码17 小时前
手写 Zustand:三十分钟带你搞懂状态管理库的核心原理
前端·javascript·源码
神奇的程序员7 小时前
重构了自己5年前写的截图插件
前端·javascript·架构
UXbot9 小时前
一人独立交付 UI + 前端:AI 驱动 UI 设计工具的五大功能模块深度评测
前端·低代码·ui·设计模式·交互
kobesdu9 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
诚实可靠王大锤9 小时前
React Native 输入框与按钮焦点冲突解决方案(rn版本0.70.3)
前端·javascript·react native·react.js
kyriewen9 小时前
测试妹子让我写单测,我偷偷用AI一天干完一周的活
前端·chatgpt·cursor
2601_957780849 小时前
Claude Code 2026年最新部署指南:从环境搭建到技能扩展
前端·人工智能·ai编程·claude
zhangfeng113310 小时前
workbuddy 专家 “前端开发师” 结合nvidia-mistral-small-4-119b-2603 项目计划-前端界面开发.md
前端·人工智能·免费