在用vue开发,运行vue-cli-service本地调试时,如果想对接后端的接口,浏览器会提示CORS Access-Control-Allow-Origin问题。

浏览器跨域是我们在开发过程中经常遇到的问题,常用的方法有jsonp,但jsonp只支持get方式,我们可以使用CORS解决浏览器跨域的问题。
照网上的方法,在PHP代码里面设置头消息,我用的是ThinkPHP框架,写在了action里面,但仍旧报跨域错误。
header('content-type:application:json;charset=utf8');
header("Access-Control-Allow-Origin:http://127.0.0.1");//允许访问的域名
header('Access-Control-Allow-Methods:POST');//跨域请求方式
header('Access-Control-Allow-Headers:x-requested-with,content-type');
后来,我把它放到class之前,命名空间之后,便解决了使用CORS浏览器跨域的问题。

为什么会出现跨域:
浏览器访问非同源的网址时,会被限制访问,出现跨域问题.
常见的跨域有三种:
jspn跨域,原理:动态生成script标签,通过script标签引入接口地址(因为script标签不存在跨域的)
cors跨域(后端开启) :全称 “跨域资源共享”,原理:它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制
vue代理服务器proxy跨域:通过请求本地的服务器,然后本地的服务器再去请求远程的服务器(后端部署接口的服务器),最后本地服务器再将请求回来的数据返回给浏览器(本地服务器和浏览器之前不存在跨域)
两个关键点:
本地服务器(利用node.js创建的本地服务器进行代理,也叫代理服务器)和浏览器之间不存在跨域
服务器和服务器之间不存在跨域
话不多说,直接上代码:
修改vue.config.js文件
// 假设要请求的接口是:http://40.00.100.100:3002/api/user/add
module.exports = {
devServer:{
host:'localhost', // 本地主机
port:5000, // 端口号的配置
open:true, // 自动打开浏览器
proxy:{
'/api': { // 拦截以 /api 开头的接口
target: 'http://40.00.100.100:3002',//设置你调用的接口域名和端口号 别忘了加http
changeOrigin: true, //这里true表示实现跨域
secure: false, // 如果是https接口,需要配置这个参数
pathRewrite: {
'^/api':'/' //这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/api/user/add',直接写‘/api/user/add’即可
}
},
// 假如又有一个接口是:http://40.00.100.100:3002/get/list/add
// 那就再配置一个 get的,如下:
'/get': { // 拦截以 /get 开头的接口
target: 'http://40.00.100.100:3002',//设置你调用的接口域名和端口号 别忘了加http
changeOrigin: true, //这里true表示实现跨域
secure: false, // 如果是https接口,需要配置这个参数
pathRewrite: {
'^/api':'/' //这里理解成用‘/api’代替target里面的地址,
}
}
// 调用的时候直接 /get/list/add 就可以了
}
}
}
// 注意:修改了配置文件后一定要重启才会生效;
如果上面不行,再下面的
devServer: {
// host: 'localhost',
port: 8080,
open: true,
overlay: {
warnings: false,
errors: true
},
proxy: 'http://40.00.100.100:3002',//开发调试用:设置开发接口地址
}

