大家好,又见面了,我是你们的朋友全栈君。
一、什么是跨域问题
同源:域名,协议,端口均相同
不同源就是跨域,比如你的前端为localhost:9528
,后端为localhost:8080
,此时前端去访问后端接口就会产生跨域问题,因为端口不同。
这里不详细讲,可参考百度百科-同源策略。
二、如何解决
跨域问题前后端都可以解决,这里仅提供vue的前端跨域解决方案:
前端vue.config.js配置如下,然后保证在你访问后端接口时加个前缀/api
。
devServer: {
port: port,
open: false,
overlay: {
warnings: false,
errors: true
},
proxy: {
// vue2.x版本为 proxyTable,vue3.x为proxy。
// detail: https://cli.vuejs.org/config/#devserver-proxy
'^/api': {
target: 'http://localhost:9999', // 这里的端口是后端端口
changeOrigin: true,
secure: false, // 如果是https接口,需要配置这个参数为true
pathRewrite: {
// 路径重写
'^/api':''
}
}
}
}
三、例子
以下例子访问接口的时候都会保证访问的路径为:/api/about/first
,包含前缀/api
例1 以axios为例
代码语言:javascript复制axios.get('/api/about/first', function (res) {
console.log(res)
})
例2 以 vue-element-admin为例
request.js:baseURL这里不写 baseURL
代码语言:javascript复制const service = axios.create({
// baseURL: process.env.VUE_APP_BASE_API, // url = base url request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 10000 // request timeout
})
api/xxx.js: 在接口这里加前缀
代码语言:javascript复制import request from '@/utils/request.js'
export default {
getFirst() {
return request({
url: '/api/about/first',
method: 'get'
})
}
}
vue.config.js:
代码语言:javascript复制devServer: {
port: port,
open: false,
overlay: {
warnings: false,
errors: true
},
proxy: {
// change xxx-api/login => mock/login
// detail: https://cli.vuejs.org/config/#devserver-proxy
'^/api': {
target: 'http://localhost:9999', // 这里的端口是后端端口
changeOrigin: true,
secure: false, // 如果是https接口,需要配置这个参数为true
pathRewrite: {
'^/api':''
}
}
}
}
例3 仍以 vue-element-admin为例
request.js:baseURL这里加前缀
代码语言:javascript复制const service = axios.create({
baseURL: '/api', // url = base url request url process.env.VUE_APP_BASE_API 'api'
withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
api/xxx.js:这里不加前缀
代码语言:javascript复制import request from '@/utils/request.js'
export default {
getFirst() {
return request({
url: '/about/first',
method: 'get'
})
}
}
vue.config.js:
代码语言:javascript复制devServer: {
port: port,
open: false,
overlay: {
warnings: false,
errors: true
},
proxy: {
// change xxx-api/login => mock/login
// detail: https://cli.vuejs.org/config/#devserver-proxy
'^/api': {
target: 'http://localhost:9999', // 这里的端口是后端端口
changeOrigin: true,
secure: false, // 如果是https接口,需要配置这个参数为true
pathRewrite: {
'^/api':''
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。