-
从一个服务域请求另外一个服务器
为开发服务器配置自定义代理规则。期望接收一个 { key: options } 对象。任何请求路径以 key 值开头的请求将被代理到对应的目标
proxy: {
"key": "options"
}
- 同域
-
协议相同 - https 和 http 属于不同域
IP 相同 - localhost 和 127.0.0.1 属于不同域
端口相同
可以由前端或后端解决
解决跨域的冲突;注意调整接口的使用
localhost:本地服务器,不经过网卡传输的,它不受网络防火墙和网卡相关的限制
127.0.0.1:本机地址是域名访问,通过网卡传输的,依赖网卡,并受到网络防火墙和网卡相关的限制
- 前端处理
-
修改项目 vite.config.js 中的服务器 server 配置,增加对访问接口的代理 - 将所有以 /store 开头的请求,代理到 http://127.0.0.1:3000
server: {
// open: false,
// host: '127.0.0.1',
// port: '5173',
proxy: {
'/api': {
target: 'http://127.0.0.1:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
开启重写 rewrite,请求时要 额外 指定请求路径前缀串,但是会被替换为空;主要起到 分类 的作用
- 先拼接再替换;替换请求中的同名串
-
请求为:
/api
拼接为
http://127.0.0.1:3000/api/
替换掉/api后,解析为
http://127.0.0.1:3000/
请求为:
/api/detail
拼接为
http://127.0.0.1:3000/api/detail
替换掉/api后,解析为
http://127.0.0.1:3000/detail
- [] 王者荣耀英雄资料数据抓取代理
-
添加一个代理
'/api': {
target: 'https://pvp.qq.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
网络请求
axios.get('/api/web201605/js/herolist.json').then(res => {
console.log(res);
})
- 后端处理
-
简单粗暴的设置响应头 Access-Control-Allow-Origin为所有*
router.get('/all', (req, res) => {
// console.log('hi', req);
res.header('Access-Control-Allow-Origin', '*')
res.send(food.cont)
})
或设置指定的地址
res.header('Access-Control-Allow-Origin', 'localhost:3000')
为了避免在每个请求中设置响应头,可以使用中间件,统一处理
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
next();
})
- 使用第三方库 cors
-
安装
npm install cors
引入
const cors = require('cors')
使用
app.use(cors());