从Vue到Postman全面验证API接口跨域问题解决

 更新时间:2024年08月09日 11:12:03   作者:niaonao  
我们都知道跨域是同源策略导致的,域名不同、协议不同、端口号不同任意一种情况都会导致跨域,这篇文章主要介绍了从Vue到Postman全面验证API接口跨域问题,需要的朋友可以参考下

1、前言

    最近刚接手了一个新项目,业务还没了解全,让开发功能。做了俩接口,postman自测完能拿到数据就给前端联调了。
    过了十分钟,前端告诉我要解决下跨域问题。我心想,这个服务都运行这么久了,生产环境还有三方产品在调用它,怎么突然存在跨域问题。看了下项目确实没有做跨域配置。
    但是三方产品都在用很久了。带着疑问,还是找方法去测了下接口是否支持跨域。然后再去配置跨域拦截,解决跨域问题。

2、跨域问题

    我们都知道跨域是同源策略导致的。域名不同、协议不同、端口号不同任意一种情况都会导致跨域。

域名不同:当前页面的域名为 www.example.com,而请求的资源的域名为 api.example.com。
协议不同:当前页面的协议为 https,而请求的资源的协议为 http。
端口号不同:当前页面的端口号为 8080,而请求的资源的端口号为 9090。

    此处测试用端口号不同的场景来测试。
    我的后端服务端口为9090
    发出请求的前端资源端口暂定为5173
    前端请求后端,此时满足端口号不同,根据同源策略会出现跨域。

3、后端服务接口

接口名称:/ai/assistant/getEngineModel
请求类型:GET
服务地址:localhost:9090

@RestController
@RequestMapping("/ai/assistant")
public class AssistantController {
    @GetMapping("/getEngineModel")
    public Result<List<EngineModelVO>> getEngineModel(){
        return ResultUtils.success(engineModelList);
    }
}

4、接口跨域测试

4.1 Vue调用测试

    Vue项目端口为5173,运行后访问localhost:5173服务。
    此处Vue项目中引入了axios组件,直接使用axios调用接口进行测试。

<template>
    <AButton @click="clickWechat"/>
</template>
<script>
import axios from 'axios'
const clickWechat =() => {
    axios({
      method: 'get',
      url: 'http://localhost:9090/ai/assistant/getEngineModel',
      withCredentials: true,
      data: {},
    }).then(({ data }) => {
      console.log(data)
    })
}
</script>

跨域失败截图

跨域成功截图

4.2 Postman测试

    在Postman下新建Collections,然后在项目下新建请求Add request。
    在Headers下新增Origin,维护值为localhost:5173。表示我要从localhost:5173请求localhost:9090的服务。
    点击Send,虽然服务响应Status为200,Response Body 也正常返回接口数据。
    但是Response Headers中不包含Access-Control-Allow-Origin localhost: 5173,说明当前请求存在跨域问题。

跨域失败截图
缺少Access-Control-Allow-Origin localhost: 5173

跨域成功截图
包含以下响应内容
Access-Control-Allow-Origin localhost: 5173
Vary: Origin
Access-Control-Allow-Credentials: true

5、服务接口增加注解@CrossOrigin解决跨域

    确认项目跨域问题存在,对新增服务接口增加注解 @CrossOrigin 即可。
    扩展说明:跨域问题解决方式很多,不限于当前@CrossOrigin注解、WebMvcConfigurer接口和自定义Filter。

@RestController
@RequestMapping("/ai/assistant")
public class AssistantController {
    @GetMapping("/getEngineModel")
    @CrossOrigin(origins = "*")
    public Result<List<EngineModelVO>> getEngineModel(){
        return ResultUtils.success(engineModelList);
    }
}

到此这篇关于从Vue到Postman全面验证API接口跨域问题的文章就介绍到这了,更多相关Vue到Postman全面验证API接口跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue轮播图插件vue-awesome-swiper的使用代码实例

    vue轮播图插件vue-awesome-swiper的使用代码实例

    本篇文章主要介绍了vue轮播图插件vue-awesome-swiper的使用代码实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • vue v-for中key的原理详析

    vue v-for中key的原理详析

    key属性可以用来提升v-for渲染的效率,vue中使用v-for渲染数据的时候,并不会去改变原有的元素和数据,下面这篇文章主要给大家介绍了关于vue v-for中key原理的相关资料,需要的朋友可以参考下
    2022-04-04
  • vue 将页面公用的头部组件化的方法

    vue 将页面公用的头部组件化的方法

    本篇文章主要介绍了vue 将页面公用的头部组件化的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • vue封装swiper代码实例解析

    vue封装swiper代码实例解析

    这篇文章主要介绍了vue封装swiper代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)

    webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)

    这篇文章主要介绍了解决webpack vue 项目打包生成的文件,资源文件报404问题的修复方法,需要的朋友可以参考下
    2018-01-01
  • 关于在vue中实现过渡动画的代码示例

    关于在vue中实现过渡动画的代码示例

    Vue是一款流行的前端框架,支持过渡动画的实现是其中的一项重要特性,在Vue中,使用过渡动画可以为用户提供更加友好的用户体验,下面我将为大家介绍一下子如何在Vue中实现过渡动画,需要的朋友可以参考下
    2023-06-06
  • 详解vite+ts快速搭建vue3项目以及介绍相关特性

    详解vite+ts快速搭建vue3项目以及介绍相关特性

    这篇文章主要介绍了vite+ts快速搭建vue3项目以及介绍相关特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Vue项目打包编译优化方案

    Vue项目打包编译优化方案

    当一个较复杂的vue项目打包后,文件会非常大,而且访问时资源加载速度很慢,本文介绍了几种措施来优化。
    2020-09-09
  • Vue3 携手 TypeScript 搭建完整项目结构

    Vue3 携手 TypeScript 搭建完整项目结构

    TypeScript 是JS的一个超级,主要提供了类型系统和对ES6的支持,使用 TypeScript 可以增加代码的可读性和可维护性,在 react 和 vue 社区中也越来越多人开始使用TypeScript,这篇文章主要介绍了Vue3 携手 TypeScript 搭建完整项目结构,需要的朋友可以参考下
    2022-04-04
  • vue指令防止按钮连点解析

    vue指令防止按钮连点解析

    这篇文章主要介绍了vue指令防止按钮连点解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04

最新评论