跨域:请求者的url协议端口或者ip与被请求者有其中一个不同,即是跨域

https://zhuanlan.zhihu.com/p/422925154/edit

简单的说就是前端向后端取数据(vue通过npm启动会有个初始端口号 http://localhost8080)

这个时候你后端在idea,前端要取数据也要启动后端服务器是吧!但是端口号8080被占领,只能通过配置文件修改端口号,例如修改端口号为8081(例如 http://localhost8081)

这个时候前端vue请求后端的话就是8080端口向8081端口请求(也就出现跨域问题),但是由于浏览器的策略是不允许跨域的,所以数据就报错了!

解决跨域:

前端vue解决方式:

与src文件夹同级定义vue.config.js文件:注意要同级目录下

js内容:

// 跨域配置
module.exports = {
 devServer: {                //记住,别写错了devServer//设置本地默认端口  选填
 port: 9876,
 proxy: {                 //设置代理,必须填
 '/api': {              //设置拦截器  拦截器格式   斜杠+拦截器名字,名字可以自己定
 target: 'http://localhost:8082',     //代理的目标地址
 changeOrigin: true,              //是否设置同源,输入是的
 pathRewrite: {                   //路径重写
 '/api': '' //选择忽略拦截器里面的单词
                }
            }
        }
    }
}

解析下js代码的内容

port: 9876 表示给当前的vue项目一个动态启动地址

target: ‘http://localhost:8082’, //代理的目标地址,你可以修改端口号(与你idea项目的启动端口一直),使得你的vue项目与idea服务器数据跨域得到解决

‘/api’: ” //选择忽略拦截器里面的单词,定义是一个空的字符串,访问后端的路径就成为

/api/xxx方法

告诉浏览器不它的策略不拦截这种类型的请求,就解决跨域问题了

后端IDEA的SpringBoot项目解决方法:

SpringBoot给出了一个很简单解决数据跨域的解决方法:

在Controller的类上面添加注解

@CrossOrigin

即可解决跨域的问题

实例

首先在SpringBoot上定义一个实体类返回给vue的请求网页,添加跨域解决的注解

在vscode上,用axios向/api/user也就是上面idea的/user映射发出请求

为什么是/api/user?

看下面,因为我已经让vue让端口9876代理,然后设置了不拦截api,也就是localhost:8082,

8082是我idea项目的端口号

启动项目:

可以看到vue被9876端口代理,IDEA项目端口号是8082

让vue发起请求获得user对象并打印

好了你的vue可以和idea通信了!