vue-cli3.0解决跨域问题

313 阅读1分钟

跨域是什么:

跨域,是指浏览器不能执行其它网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript实施的安全限制。

简单来讲,就是从地址A加载的页面,不能访问地址B的服务(如上图)。此时地址A与地址B不同源。

所谓同源,就是域名、协议、端口均相同。举个例子:

http://www.123.com/index.html 调用 http://www.123.com/abc.do (非跨域)
http://www.123.com/index.html 调用 http://www.456.com/abc.do (主域名不同:123/456,跨域)
http://abc.123.com/index.html 调用 http://def.123.com/server.do (子域名不同:abc/def,跨域)
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.do(端口不同:8080/8081,跨域)
http://www.123.com/index.html 调用 https://www.123.com/server.do (协议不同:http/https,跨域)

如上所述,由于合作方的域名与我方的域名不同,从合作方加载的页面,调用我方接口的时候,就会出现跨域的报错。

简单的来说:协议、IP、端口三者都相同,则为同源。不是同源的脚本不能操作其他源下面的对象。

解决方案

在前端设置proxy代理,来解决跨域问题。这边使用的是vue-cli3.0

在根目录的vue.config.js下加入如下配置:

module.exports = {    devServer:{        proxy: {            '/api': {                target: 'http://47.114.73.36:8077', //API服务器的地址                ws: true,  //代理websockets                changeOrigin: true, // 虚拟的站点需要更管origin                pathRewrite: {   //重写路径 比如'/api/aaa/ccc'重写为'/aaa/ccc'                    '^/api': ''                }            }        },    },}

我们仅需在axios的封装方案上,就可以对应上devServer设置的变量。示列:

 axios        .post(          "/api"+"/tianbo/user/login",          qs.stringify({            iphone: iphone,            pwd: psd,          })        )        .then((res) => {          console.log(res);          }        });

设置完代理别忘了重启服务器。

好了,以上就是vue中配置代理解决跨域的问题。

如有问题,请指出,接受批评。