如何解决vue项目(cli3以上)中的跨域问题(axios版)

如何解决vue项目(cli3以上)中的跨域问题(axios版)

今天在写项目的时候突然网络请求发送不出去,一看是出现了跨域问题,如下图。
在这里插入图片描述

要想解决这个问题,我们必须先了解什么是跨域,当然你想直接看解决方法可以直接下滑拉。

什么是跨域?

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

这里说明一下,无法跨域是浏览器对于用户安全的考虑,如果自己写个没有同源策略的浏览器,完全不用考虑跨域问题了。是浏览器的锅,对。

同源策略限制了一下行为:

  1. Cookie、LocalStorage 和 IndexDB 无法读取
  2. DOM 和 JS 对象无法获取
  3. Ajax请求发送不出去
什么是浏览器同源策略?

同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

它的核心就在于它认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。

所谓同源是指:域名、协议、端口相同。

举个栗子:如下,相对于http://www.beiebi.cn/home/index.html的同源检测结果

URL结果原因
http://www.beiebi.cn/person/index.html成功域名,协议,端口都相同
https://www.beiebi.cn/home/index.html失败协议不同
http://www.beiebi.cn:8080/home/index.html失败端口不同
http://www.beiebi.com/home/index.html失败域名不同

如何解决跨域呢?

我们这里使用的是服务器代理的方法

浏览器有跨域限制,但是服务器不存在跨域问题,所以可以由服务器请求所要域的数据再返回给客户端

在二次封装的axios里面将 baseUrl修改

axios.defaults.baseURL = “/api”

然后在vue.config.js(没有的在项目根目录下自己建一个)配置代理,将你真正想要访问的域名放在target里面

module.exports = {
	devServer: {
		proxy: {
			"/api": {
				// 此处的写法,目的是为了 将 /api 替换成 你想要访问的域名
				target: "http://www.beibei.com/home",
				// 允许跨域
				changeOrigin: true,
				pathRewrite: {
					"^/api": "",
				},
			},
		},
	},
}

然后就可以正常的发送请求,获取数据了

axios如何二次封装看我另一篇博客 vue中axios的二次封装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值