Vue开发中可能会遇到的跨域问题

90 阅读2分钟

什么是跨域

跨域是一个老生常谈的问题了,但是在解决问题之前我们还是要来再认识一下什么是跨域。

跨域问题归根结底就是浏览器的同源策略造成的

同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。

摘抄自MDN

同源的定义

如果两个URLprotocol(协议:HTTP、HTTPS)、port(端口)(如果有指定的话)和host(地址:domain)都相同的话,则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”,或者直接是“元组”。(“元组”是指一组项目构成的整体,双重/三重/四重/五重/等的通用形式)。

下表给出了与URL的源进行对比的示例:

http://store.company.com/dir/page.html

URL结果原因
http://store.company.com/dir2/other.html同源只有路径不同
http://store.company.com/dir/inner/another.html同源只有路径不同
https://store.company.com/secure.html失败协议不同
http://store.company.com:81/dir/etc.html失败端口不同 ( http:// 默认端口是 80)
http://news.company.com/dir/other.html失败主机不同

解决办法

跨域问题的解决办法有很多,最简单的就是找到你的后端攻城狮添加一行代码即可解决。

本文章只介绍Vue中使用vue-cli提供的Node正向代理解决跨域问题,此方法只能在开发阶段使用

Node正向代理

Vue底层的webpack已经提供了相关的功能,我们只需要在vue.config.js配置文件中添加相关设置即可开启代理功能

module.exports = {
    devServer: {
        proxy: {
          '/api': {
          // target中设置需要代理的相关地址
            target: 'http://localhost:8080'
          }
        }
    }
}

根据webpack文档中的描述,对 /api 路径下的相关请求会被代理到 http://localhost:8080/api路径下