解决Vue前后端跨域问题的方式汇总

 更新时间:2022年11月25日 17:22:08   作者:小花皮猪  
这篇文章主要介绍了解决Vue前后端跨域问题的多种方式,本文主要介绍借助解决Vue前后端跨域问题的几种方式,将会使用axios进行请求需要的朋友可以参考下

1 前言

本文主要介绍借助解决Vue前后端跨域问题的几种方式

说到ajax请求,就不得不说下xhr(XMLHttpRequest)了,它可以说是鼻祖,但是实际开发中,我们不会直接使用它,而是进行二次封装或者使用成熟的第三方封装,比如JQuery,axios

本文将会使用axios进行请求

2 axios介绍

既然说到封装了,那就不得不提到axios了,它和JQuery相比,它支持请求拦截器和响应拦截器,并且体积很小,大约是JQuery的四分之一体积,一般在vue项目里面,基本都是使用axios请求

下载axios

想要使用axios,必须先下载它,打开终端,输入

npm i axios

这个库非常的小,安装很快

引入axios

下载完毕之后,就可以引用了

// 引入axios
import axios from 'axios'

3 模拟场景

基本工作做完后,就可以开发前后端代码,模拟跨域场景了

后端接口

后端起一个服务,端口为9090,有一个get请求,先访问下,因为是get请求,可以直接在浏览器访问,所以说接口是没问题的

前端请求

有了后端的接口,我们就可以在前端去请求了,上述已经安装好了axios,所以直接编写代码请求后端接口,通过控制台可以看到,前端的端口是8080

<template>
    <div>
        <button @click="getInfo">获取信息</button>
    </div>
</template>
<script>
    // 引入axios
    import axios from 'axios'
    export default {
            name:'App', 
            methods:{
                getInfo(){
                    // 使用axios发送请求(get) 发送请求后会有两个回调
                    axios.get('http://localhost:9090/queryUserInfo').then(
                        // 成功回调
                        success=>{
                            console.log('请求成功!')
                            // 请求成功后的数据
                            console.log(success.data)
                        },
                        // 失败回调
                        error=>{    
                            console.log('请求失败!')
                            // 请求失败原因
                            console.log(error.message)
                        }
                    )
                }
            }
        }
</script>

然后发送请求,发现控制台报错了,这是一个很经典的跨域问题

4 发现跨域问题

所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

上面的例子就算因为前后端通信的端口不一致造成的跨域问题

常用的解决问题的手段有以下三种

1 cors
2 JSONP
3 代理

我们一一举例说明

5 解决跨域 cors

这种方式是我工作中处理跨域用到最多也是最简单的一种方式,直接通过注解解决跨域问题

cors

解决跨域,一般不用于前端做任何事,而是后端或者服务器去操作,其实就是在服务器里面返回相应的时候加几个响应头,某种程度上来说,cors解决跨域才是真正意义上的解决跨域,但是在开发中,这个响应头不是随便配置的,如果随意配置,就会造成一个问题就算任何人都能找服务器要数据,存在一些安全风险

注解解决跨域

在后端的controller或某个具体方法上可以加上@CrossOrigin注解解决跨域

加完注解后,这个时候重启后端服务器再访问,发现问题解决

值得注意的是,@CrossOrigin这个注解默认是解决全部路径的跨域,有时候一些参数需要自己设置,否则可能会有安全隐患

全局配置跨域

如果使用注解,那么我们需要在每一个controller或者方法上都要加上注解才能解决跨域的问题

那么有没有一种一劳永逸的办法呢?

当然有,我们可以使用全局配置跨域,代码如下:

注意:一定不要忘了使用@Configuration注解配置到项目中,否则无效,具体的一些参数或者路径,根据自身需求设置即可

package com.wyh.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsMapping implements WebMvcConfigurer {
    @Override
    /**
     * 重新跨域支持方法
     * CorsRegistry  开启跨域注册
     */
    public void addCorsMappings(CorsRegistry registry) {
        //addMapping 添加可跨域的请求地址
        registry.addMapping("/**")
                //设置跨域 域名权限 规定由某一个指定的域名+端口能访问跨域项目
                .allowedOrigins("*")
                //是否开启cookie跨域
                .allowCredentials(false)
                //规定能够跨域访问的方法类型
                .allowedMethods("GET","POST","DELETE","PUT","OPTIONS")
                //添加验证头信息  token
                //.allowedHeaders()
                //预检请求存活时间 在此期间不再次发送预检请求
                .maxAge(3600);
    }
}

以上就是通过cors解决跨域的两种方式

JSONP

除了使用cors解决跨域,还可以使用JSONP,它解决跨域的方式其实挺巧妙的,它借助了script标签li的src属性,在引入外部资源的时候不受同源策略限制的特点办到的,虽然JSONP比较巧妙,但是真正开发中用到的微乎其微,因为想要实现JSONP解决跨域,不仅仅要前端人员要用到特殊写法,后端人员也得配置前端才能实现,并且只能解决get请求跨域问题,相对来说很鸡肋

这里就得吐槽一句了,虽然开发用的少,但是面试就喜欢问你JSONP,就看你知道不知道这个巧

代理

由于篇幅问题,我另外写了一篇文章,大家可以参考:Vue项目打包部署到iis服务器的配置方法

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

相关文章

  • vue-cli3打包时图片压缩处理方式

    vue-cli3打包时图片压缩处理方式

    这篇文章主要介绍了vue-cli3打包时图片压缩处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • vue中v-model如何绑定多循环表达式实战案例

    vue中v-model如何绑定多循环表达式实战案例

    v-model绑定的变量无论是对象还是数组都是绑定的value值,下面这篇文章主要给大家介绍了关于vue中v-model如何绑定多循环表达式的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • vue-cli 关闭热更新操作

    vue-cli 关闭热更新操作

    这篇文章主要介绍了vue-cli 关闭热更新操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue 和 Django 实现 Token 身份验证的流程

    Vue 和 Django 实现 Token 身份验证的流程

    这篇文章主要介绍了Vue 和 Django 实现 Token 身份验证 ,Vue.js 和 Django 编写的前后端项目中,实现了基于 Token 的身份验证机制,其他前后端框架的 Token 实现原理与本文一致,需要的朋友可以参考下
    2022-08-08
  • Vue-Cli配置代理转发解决跨域问题的方法

    Vue-Cli配置代理转发解决跨域问题的方法

    本文主要介绍了Vue-Cli配置代理转发解决跨域问题的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 使用vue-router beforEach实现判断用户登录跳转路由筛选功能

    使用vue-router beforEach实现判断用户登录跳转路由筛选功能

    这篇文章主要介绍了vue使用vue-router beforEach实现判断用户登录跳转路由筛选,本篇文章默认您已经会使用 webpack 或者 vue-cli 来进行环境的搭建,并且具有一定的vue基础。需要的朋友可以参考下
    2018-06-06
  • Vue项目中npm install卡住问题解决的详细指南

    Vue项目中npm install卡住问题解决的详细指南

    这篇文章主要介绍了Vue项目中npm install卡住问题解决的相关资料,文中包括更换npm镜像源、清除npm缓存、删除.npmrc文件和升级Node.js版本,需要的朋友可以参考下
    2024-12-12
  • Vue中el-tree树全部展开或收起的实现示例

    Vue中el-tree树全部展开或收起的实现示例

    本文主要介绍了Vue中el-tree树全部展开或收起的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Vue3源码分析reactivity实现方法示例

    Vue3源码分析reactivity实现方法示例

    这篇文章主要为大家介绍了Vue3源码分析reactivity实现方法原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • vue实现分页的三种效果

    vue实现分页的三种效果

    这篇文章主要为大家详细介绍了vue实现分页的三种效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论