解决跨域的方式
1. cors
后端设置允许跨域的请求头
response.setHeader("Access-Control-Allow-Origin","*")
// KOA2
ctx.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, // 支持websocket
changeOrigin:true //是否欺骗服务器,客户端地址
},
"server2":{
target:"http://localhost:9000", //目标服务器
pathRewrite:{"^/server2":""}, // 重写路径,将开头的serve1去掉
ws:true, // 支持websocket
changeOrigin:true //是否欺骗服务器,客户端地址
}
}
}
发送请求时,需要带上标识
axios({
method:"get",
url:"/server2/server"
}).then(res=>{
console.log(res)
},err=>{
console.log(err)
})