赞
踩
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");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。