vue如何解决axios请求前端跨域问题

 更新时间:2021年10月24日 10:58:09   作者:浪漫主义码农  
vue项目中,前端使用axios与后台进行数据请求或者提交的时候,如果后台没有设置跨域,浏览器做数据请求的时候就会报错,这篇文章主要给大家介绍了关于vue如何解决axios请求前端跨域问题的相关资料,需要的朋友可以参考下

前言

最近在写纯前端的vue项目的时候,碰到了axios请求本机的资源的时候,出现了访问报404的问题。这就让我很难受。查询了资料原来是跨域的问题。

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

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

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

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

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

二、解决方案

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

未处理跨域前的报错

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

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

跨域资源共享(CORS)

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

1、vue项目的端口是8081

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

3、配置代理

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,//代理websocked
                changeOrigin:true,//虚拟的站点需要更管origin
                pathRewrite:{
                    '^/api':''//重写路径
                }
            }
        }
    }
}

小结:

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

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

比如 请求接口为localhost:8080/getData 我们只需要传入:getData
那么公共的域名就是 localhost:8080/,我们就是在请求接口的公共域名localhost:8080/改为api/即可!

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

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

写在最后

在学习中还是要多看官方文档,在跨域等配置问题上,官方文档也给出了很多的配置信息,vue cli配置

总结一下最近的现象:只要累不死,就往死里卷。加油各位。

到此这篇关于vue如何解决axios请求前端跨域问题的文章就介绍到这了,更多相关vue解决axios请求前端跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你完全掌握Vue自定义指令

    一文带你完全掌握Vue自定义指令

    作为使用Vue的开发者,我们对Vue指令一定不陌生,诸如v-model、v-on、等,同时Vue也为开发者提供了自定义指令的api,熟练的使用自定义指令可以极大的提高了我们编写代码的效率,让我们可以节省时间开心的摸鱼
    2023-03-03
  • 详解Vue中router-view组件的使用

    详解Vue中router-view组件的使用

    router-view组件作为vue最核心的路由管理组件,在项目中作为路由管理经常被使用到,所以下面小编就来和大家详细聊聊router-view组件的具体使用方法,希望对大家有所帮助
    2023-06-06
  • Vue动画之第三方类库实现动画方式

    Vue动画之第三方类库实现动画方式

    这篇文章主要介绍了Vue动画之第三方类库实现动画方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • axios请求的一些常见操作实战指南

    axios请求的一些常见操作实战指南

    axios是一个轻量的HTTP客户端,它基于XMLHttpRequest服务来执行 HTTP请求,支持丰富的配置,支持Promise,支持浏览器端和 Node.js 端,下面这篇文章主要给大家介绍了关于axios请求的一些常见操作,需要的朋友可以参考下
    2022-09-09
  • vue的全局提示框组件实例代码

    vue的全局提示框组件实例代码

    这篇文章主要介绍了vue的全局提示框组件实例代码,需要的朋友可以参考下
    2018-02-02
  • 如何在vue中使用pdfjs预览pdf文件

    如何在vue中使用pdfjs预览pdf文件

    本文主要讲解了如何在vue中使用pdfjs预览pdf文件,这样的优势是无须让用户安装专门的软件即可实现预览,下面就看看如何实现这个需求
    2021-06-06
  • 详解为element-ui的Select和Cascader添加弹层底部操作按钮

    详解为element-ui的Select和Cascader添加弹层底部操作按钮

    这篇文章主要介绍了详解为element-ui的Select和Cascader添加弹层底部操作按钮,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 一篇文章告诉你Vue3指令是如何实现的

    一篇文章告诉你Vue3指令是如何实现的

    在计算机技术中,指令是由指令集架构定义的单个的CPU操作,在更广泛的意义上,“指令”可以是任何可执行程序的元素的表述,例如字节码,下面这篇文章主要给大家介绍了关于Vue3指令是如何实现的相关资料,需要的朋友可以参考下
    2022-01-01
  • vue router demo详解

    vue router demo详解

    这篇文章主要为大家详细介绍了vue router demo演示代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 详解key在Vue3和Vue2的不同之处

    详解key在Vue3和Vue2的不同之处

    key属性是一个特殊的属性,用于标识每个节点的唯一性。在Vue2.x版本中的key和Vue3.x版本中的key有很大的不同,那么在这篇文章中,我们将会讨论Vue2中的key和Vue3中的key的区别
    2023-04-04

最新评论