同源:域名,协议,端口均相同
不同源就是跨域,比如你的前端为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
axios.get('/api/about/first', function (res) {
console.log(res)
})
request.js:baseURL这里不写 baseURL
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: 在接口这里加前缀
import request from '@/utils/request.js'
export default {
getFirst() {
return request({
url: '/api/about/first',
method: 'get'
})
}
}
vue.config.js:
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':''
}
}
}
}
request.js:baseURL这里加前缀
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:这里不加前缀
import request from '@/utils/request.js'
export default {
getFirst() {
return request({
url: '/about/first',
method: 'get'
})
}
}
vue.config.js:
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':''
}
}
}
}