【前言】
前后端联调一个重要桥梁就是通过代理。而代理又分为正向代理和反向代理。正向代理就是代理客户端(典型的就是charles的常规使用),反向代理就是代理服务器(像webpack或gulp中的返向代理)。
正向代理的使用场景
1. 线上的环境已经确定,然后前端需要用本地的代码调试,后端就用线上的。
2. 线上的项目是有多个项目组成的(比如一个总项目套了很多iframe),本地的项目是其中一个项目。但是由于登录验证的存在,本地的项目就不好通过反向代理进行调试(因为本地的工程只是一其中一个项目的工程,不包含登录部分的代码)。
反向代理的使用场景
1. 线上的环境已经确定,然后前端需要用本地的代码调试,后端就用线上的。
2. 线上的项目和本地的项目是一样的(没有嵌套iframe)。
charles@4.5.6(正向代理的软件)和vue-cli@4.4.1(vue的脚手架基于webpack实现了反向代理)的优缺点对比
charles的优点:
- 特别适合对那种由多个iframe组成的大项目
- 除了正向代理,还有很多其他功能
charles的缺点:
- charles学习成本稍微比webpack的反向代理高一些
- charles是收费软件,webpack里的反向代理插件是开源的
- 不能起服务,只能起代理的功能
webpack反向代理的优点:
- 各种前端框架的都是基于webpack的,反向代理的配置难度低
- 免费
- 可以起服务
webpack反向代理的缺点:
- 不适合那种由多个iframe组成并包含耦合逻辑的大项目
charles正向代理使用总结:
- 本地起好自己的项目,拿到url
- 将线上项目的js,css代理到本地的服务里
具体操作如下:
选择线上资源服务器的url

右键需要代理的资源,选择Map Remote

在弹出的对话框中将远程的资源代理到本地

vue-cli@4.4.1反向代理使用总结
在项目根目录下新建一个vue.config.js文件
const fs = require('fs');
const path = require('path');
module.exports = {
devServer: {
// 设置代理
proxy: {
"/": {
target: "https://simqa.dxy.net/", // 域名
// target: "https://localhost:3005/", // 域名
secure: true,//是否使用https
// ws: true, // 是否启用websockets
changeOrigin: true, //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite: {
// '^/ad': '/ad'
}
}
},
// https: {
// key: fs.readFileSync(path.join(__dirname, './cert/private_key.pem')),
// cert: fs.readFileSync(path.join(__dirname, './cert/ca-cert.pem'))
// }
}
};