代理到底是怎么一回事

前言

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

同源策略

当我们请求的地址与目标服务器的地址不一样会请求失败,是因为浏览器对 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 去处理

结论

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

相关推荐
凉豆菌3 分钟前
1、初始化vue3 electron 项目,及安装报错解决方法
前端·vue.js·electron
沐爸muba18 分钟前
JS中的for...in和for...of有什么区别?
前端·javascript
lljss202018 分钟前
表格HTML
前端·html
xmh-sxh-13141 小时前
前端常用的主流框架有哪些
前端
m0_528723811 小时前
vue2与vue3的区别
前端·javascript·vue.js
huangfuyk2 小时前
Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息
前端·javascript·vue.js·vue 3
突然好热2 小时前
cesium效果不酷炫怎么办--增加渲染器
开发语言·前端·javascript
yery3 小时前
Ubuntu24.04中安装Electron
前端·javascript·electron
小夏同学呀3 小时前
使用elementplus中的分页器,后端一次性返100条数据,前端自己做分页处理,vue3写法
前端·javascript·vue.js
Mr.Lee08213 小时前
electron-vite使用vue-i18n,ts 检查报错上不存在属性“$t”
前端·javascript·vue.js·typescript·electron