下面案例都以'http://api.com'
为服务端接口地址
webpack代理跨域
此方式都有共同的底层包http-proxy-middleware
代理跨域本质上请求发送(接收)之前加入中间层服务器(服务器与服务器之间不存在跨域),将请求代理成本域
反向代理:正向代理隐藏真实客户端,反向代理隐藏真实服务端
Vue-cli 2.x
config->index.js->dev中:
1
2
3
4
5
6
7
8
9
10proxyTable: {
'/api': {
target: 'http://api.com', //接口源地址
changeOrigin: true, //是否跨域
secure: true,
pathRewrite: {
'^/api': '' //路径重写
}
}
},
Vue-cli 3.x
vue.config.js 如果没有就新建
1
2
3
4
5
6
7
8
9
10module.exports = {
devServer: {
port: 8000,
proxy: {
"/api": {
target: 'http://api.com'
}
}
}
};
之后请求的接口由vue开启的服务代理,以/api
开头请求,无需其他操作:
1 | Axios.defaults.baseURL = '/api' |
缺陷: 基于webpack服务, 打包后没有了
Node代理跨域
cors-anywhere
- 使用node本地开启代理服务
1 | // Listen on a specific host via the HOST environment variable |
- 请求时以此路径开头
1 | Axios.defaults.baseURL = 'http://127.0.0.1:7777/http://api.certificate.uuudoo.com' |
缺点:此方式无法传递cookie,作者认为中间传递cookie不安全
webpack-dev-middleware
若前后端在一个服务且后端用nodejs,可以使用webpack配合中间件webpack-dev-middleware
将前后端处理到一起也不会跨域
1 | const webpack = require('webpack') |
其他跨域方式概括
- 第一种方式:jsonp请求;jsonp的原理是利用