解决跨域的方式
1. cors
后端设置允许跨域的请求头
response.setHeader("Access-Control-Allow-Origin","*")// KOA2ctx.set("Access-Control-Allow-Origin","*")ctx.set("Access-Control-Allow-Methods","OPTIONS,GET,POST,PUT,DELETE")
2. jsonp
利用script标签
-
3. vue项目中可使用代理服务器
-
简单方法:
- 当请求的服务器只有一个时可以简单配置
- 缺点:
- 不能配置多个服务器
- 不能控制走不走代理,如果请求的资源,本地本身就有,就不会在请求远程服务器
vue.config.js
const { defineConfig } = require('@vue/cli-service')module.exports = defineConfig({devServer:{proxy:"http://localhost:8000"}})
此时发送请求时,不需要带上主机名与端口号
axios({method:"get",url:"/student"}).then(res=>{console.log(res)},err=>{console.log(err)})
完美方法:
- 可以配置多个服务器
- 控制是否走代理
devServer:{proxy:{"server1":{ // 控制走那台服务器target:"http://localhost:8000", //目标服务器pathRewrite:{"^/server1":""}, // 重写路径,将开头的serve1去掉ws:true, // 支持websocketchangeOrigin:true //是否欺骗服务器,客户端地址},"server2":{target:"http://localhost:9000", //目标服务器pathRewrite:{"^/server2":""}, // 重写路径,将开头的serve1去掉ws:true, // 支持websocketchangeOrigin:true //是否欺骗服务器,客户端地址}}}
发送请求时,需要带上标识
axios({method:"get",url:"/server2/server"}).then(res=>{console.log(res)},err=>{console.log(err)})
