失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > vue怎样解决axios请求出现前端跨域问题(实例详解)

vue怎样解决axios请求出现前端跨域问题(实例详解)

时间:2021-10-24 09:16:07

相关推荐

vue怎样解决axios请求出现前端跨域问题(实例详解)

web前端|前端问答

vue

web前端-前端问答

易房大师源码,ubuntu给予用户权限,tomcat項目管理方案,亚马逊京东爬虫,PHP做圣诞树,广宁seolzw

在正常开发中跨域问题有很多的解决方案。最常见的就是后端修改响应头。但是前端也可以解决,通过反向代理。为了防止下一次这样的错误出现,记录一下,总结一下。

最新asp淘宝客源码,vscode 带参数调试,ubuntu 通讯工具,黑夜汉化组tomcat,婚恋网爬虫,php 波形图,怎样进行seo推广代做,社区门户论坛网站源码,玉石网站模板lzw

所以现在我们来复盘一下,然后解决掉。

表单网站源码,vscode 十大插件,Ubuntu开发本,tomcat部署路径配置,晚上爬虫子,my sql与php,fuli黑料正能量seo,html5微网站源码,齐博 模板 教程lzw

A、为什么会出现跨域的问题?

跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的。而axios是通过Promise实现对ajax技术的一种封装,也同样存在跨域问题。

B、解决方案

这里我就使用本机的开启两个不同的端口来测试。

未处理跨域前的报错

没有做跨域处理请求是这样的

axios.get(http://localhost:8080/getData) .then(res => { console.log(res) }) .catch(err => { console.error(err); })

反向代理

前端进行反向代理来解决跨域问题。原理图如下:

vue项目的端口是8081

自己电脑开启了一个8080的端口,请求/getData就会放回json数据。

配置代理

1.在vue2.0中

修改config文件夹下的index.js文件,在proxyTable中加上如下代码:

proxyTable: {/apis: { target: http://localhost:8080/, //要解决跨域的接口的域名 secure:false, //如果是https接口,需要配置这个参数 changeOrigin: true, // 如果接口跨域,需要进行这个参数配置 pathRewrite: {^/apis: \ // 路径重写 }}, },

然后在请求中axios中这样写

axios.get(apis/getData) .then(res => { console.log(res) }) .catch(err => { console.error(err); })

分析:

target后面的就是需要请求的网址的公共部分,然后用/apis来代理这个,最后重写一些路径,请求的时候使用的我们的代理的apis来作为前缀。

这个前缀我们可以自定义,proxyTable是对象,所以我们可以配多个代理。

跨域解决

2.在vue3.0中

vue-cli3 脚手架搭建完成后,项目目录中没有 vue.config.js 文件,需要手动创建

新建一个vue.config.js,配置以下信息,同样可以解决。

module.exports = { devServer: { proxy: { ^/api: {target: http://localhost:8080/,//接口的前缀ws:true,//代理websockedchangeOrigin:true,//虚拟的站点需要更管originpathRewrite:{ ^/api:\//重写路径} } } }}

小结:

changeOrigin: true :开启代理:在本地会创建一个虚假服务器,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端就可以进行数据的交互。

apis就是接口实际请求的前缀,去代理了我们的实际的接口前缀的公共部分,也就是协议+主机名+端口号

比如 请求接口为localhost:8080/getData 我们只需要传入:getData

那么公共的域名就是 localhost:8080/,我们就是在请求接口的公共域名localhost:8080/改为api/即可!

把项目运行起来可以看到接口请求的路径为 :localhost:8081/apis/getData

而进过代理后,实际的请求路径是 : localhost:8080/getData

如果觉得《vue怎样解决axios请求出现前端跨域问题(实例详解)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。