Vue跨域访问后端接口问题解决

10 篇文章 2 订阅

VUE访问接口的时候,很可能出现跨域请求,从而被提供接口的服务器拒绝,下面这篇文章主要给大家介绍了关于Vue如何解决跨域问题的相关资料,需要的朋友可以参考下

什么是跨域

跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。 这里列举一个经典的列子:

#协议跨域
http://a.baidu.com访问https://a.baidu.com;
#端口跨域
http://a.baidu.com:8080访问http://a.baidu.com:80;
#域名跨域
http://a.baidu.com访问http://b.baidu.com;

通常在不同服务器访问过程中可能会遇到跨域问题,也就是口头上常说的策略同源问题 CORS

出现跨越一般就是判断三个地方,http协议,请求地址,端口号,三者若有一处不相同,那么就会出现跨域,解决这个问题就要配置一个代理服务器,通过代理服务器实现跨域请求

问题代码

前端代码

使用了Vue Admin Template

# just a flag
ENV = 'development'

# base api
VUE_APP_BASE_API = 'http://localhost:8201'

 远程访问后端的地址为:http://localhost:8201

前端地址为:http://localhost:9528

 请求的URI的地址

import request from '@/utils/request'

export function login(data) {
  return request({
    url: '/admin/user/login',
    method: 'post',
    data
  })
}

export function getInfo(token) {
  return request({
    url: '/admin/user/info',
    method: 'get',
    params: { token }
  })
}

export function logout() {
  return request({
    url: '/admin/user/logout',
    method: 'post'
  })
}

后端代码

@RestController
@RequestMapping("/admin/user")
@Slf4j
public class UserController {
    @PostMapping("/login")
    public R login(@RequestBody Map<String, Object> map) {
        // 查询数据库
        log.info(map.toString());
        return R.ok().data("token", "admin-token");
    }

    @GetMapping("/info")
    public R info(@RequestBody Map<String, Object> map) {
        // 查询数据库
        log.info(map.toString());
        return R.ok()
                .data("roles", "[admin]")
                .data("introduction", "I am a super administrator")
                .data("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif")
                .data("name", "Super Admin");
    }
}

问题复现

问题分析

看到这个状态码CORS error可以知道这是跨域访问出错,当然这个状态码也不是绝对的,也有可能是后端接口出了问题。

以前是前端和后端是一个项目,所以才没遇到这个问题。

跨域问题:当前端使用 axios给后端发送远程异步请求的时候,会遇到跨域问题!

要求后端和前端要保持ip【域名】、port、协议一致。前端和后端只要这三个有一个不一致就会有跨域问题。

解决方案

全局解决方案:

gateway,以后有空的时候完善一下这块解决方案,现在只是提一下这个方法。

局部解决方案:

只需要在后端的controller类上写@CrossOrigin注解就可以

@RestController
@RequestMapping("/admin/user")
@Slf4j
@CrossOrigin
public class UserController {
    @PostMapping("/login")
    public R login(@RequestBody Map<String, Object> map) {
        // 查询数据库
        log.info(map.toString());
        return R.ok().data("token", "admin-token");
    }

    @GetMapping("/info")
    public R info(@RequestBody Map<String, Object> map) {
        // 查询数据库
        log.info(map.toString());
        return R.ok()
                .data("roles", "[admin]")
                .data("introduction", "I am a super administrator")
                .data("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif")
                .data("name", "Super Admin");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穗余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值