前端跨域解决方案

news/2024/12/2 18:46:29/

目录

  • 🦁 项目场景
    • 网络请求跨域error
  • 🦁 问题描述
  • 🦁 原因分析
  • 🦁 解决方案
    • 目前主流的跨域解决方案有两种
      • 1. `@CrossOrigin注解`:
        • 1.1 方法上方
        • 1.2 类上方
      • 2.`前端解决 proxy`

🦁 项目场景


网络请求跨域error

一般会出现在前后分离的项目中,前端请求后端的api时出现的error。
在这里插入图片描述

🦁 问题描述

Access to XMLHttpRequest at 'http://iwenwiki.com/api/FingerUnion/lis localhost/:1t.php'
from origin 'http://localhost:8080' has been blocked by CORS policy: No'Access-Control-Allow-Origin' header is present on the requested resource.
GET http://iwenwiki.com/api/FingerUnion/list.phpnet::ERR FAILED 200xhr.js?66c5:220
Uncaught (in promise)
AxiosError imessage:'Network Error',name:'AxiosError'code:'ERR NETWORK',Config: [...}, request: XMLHttpRequest, ...]

狮子最近在学vue,请求一个测试网站的资源时,出现的报错。

🦁 原因分析

JS采取的是同源策略,也就是说,当协议、域名、端口任意一个不相同时,都会产生跨域问题,所以又应该如何解决跨域问题呢?

tips:
同源策略是浏览器的一项安全策略,浏览器只允许js 代码请求和当前所在服务器域名,端口,协议相同的数据接口上的数据,这就是同源策略.


🦁 解决方案

目前主流的跨域解决方案有两种

1. @CrossOrigin注解

用于表明该Controller支持跨域请求。当在一个Web应用中提供一个RESTful服务时,可能需要支持来自不同域和端口的Ajax请求。这时,如果不进行跨域配置,浏览器会阻止这些请求。该注解有两种用法

1.1 方法上方

@RestController
@RequestMapping("/books")
public class BookController {@CrossOrigin(origins = "http://localhost:8080")@GetMapping("/{id}")public Book findById(@PathVariable Long id) {// ...}@CrossOrigin(origins = "*")@PostMappingpublic Book create(@Validated @RequestBody Book book) {// ...}}

1.2 类上方

当前端请求一个不同于应用部署的域时,例如从http://localhost:3000向http://localhost:8080发送请求,就会发起一个跨域请求。默认情况下,跨域请求是被禁止的,因此会导致请求失败。

@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("/api")
public class MyController {@GetMapping("/myEndpoint")public String myEndpoint() {return "Hello World!";}
}

允许来自http://localhost:3000的请求访问/myEndpoint接口。也可以使用通配符*允许所有域名的请求访问:

@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api")
public class MyController {@GetMapping("/myEndpoint")public String myEndpoint() {return "Hello World!";}
}

2.前端解决 proxy

devServer: {proxy: {'/api': {target: '<url>',changeOrigin: true}}
}

http://www.ppmy.cn/news/78597.html

相关文章

构建高可用性的核心服务层:Coupang电子商务应用程序的技术实践

随着Coupang电子商务平台用户数量的快速增长&#xff0c;构建一个高可用性的核心服务层成为了关键任务。本文将介绍Coupang如何通过统一的NoSQL数据存储、缓存层和实时数据流等技术和策略&#xff0c;构建一个高可用性的核心服务层&#xff0c;以满足日益增长的数据流量需求&am…

力扣 695. 岛屿的最大面积

一、题目描述 给你一个大小为 m x n 的二进制矩阵 grid。 岛屿是由一些相邻的 1&#xff08;代表土地&#xff09;构成的组合&#xff0c;这里的相邻要求两个 1 必须在水平或者竖直的四个方向上相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。…

实现免杀:Shellcode的AES和XOR加密策略(vt查杀率:4/70)

前言 什么是私钥和公钥 私钥和公钥是密码学中用于实现加密、解密和数字签名等功能的关键组件。 私钥是一种加密算法中的秘密密钥&#xff0c;只有密钥的拥有者可以访问和使用它。私钥通常用于数字签名和数据加密等场景中&#xff0c;它可以用于对数据进行加密&#xff0c;同…

Tauri应用开发(三):自定义拖拽区域

1. 自定义拖拽&#xff1a;data-tauri-drag-region tauri默认的顶部可拖拽&#xff0c;有时候我们不需要这个拖拽&#xff0c;或者需要自定义拖拽区域时&#xff0c;就需要通过tauri提供的data-tauri-drag-region属性来自定义拖拽区。 ![在这里插入图片描述](https://img-blog…

【Tomcat下载及使用说明】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1.什么是Tomcat 2.Tomcat下载流程及注意问题 …

关于图片加载,你需要学习一下

目录 &#x1f60a; 从何而来 &#x1f955; 设计思路 &#x1f36d; 初步设计 &#x1f6a9; 成功和失败 &#x1f6a7; 加载失败 &#x1f42c; 回调函数 ⌛ 懒加载 &#x1f6a5; 对外接口 &#x1f6a9; 测试使用 &#x1f3c6; 完整代码 &#x1f60a; 从何而…

如何成为一名黑客?小白必学的12个基本步骤

黑客攻防是一个极具魅力的技术领域&#xff0c;但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度&#xff0c;具备很深的计算机系统、编程语言和操作系统知识&#xff0c;并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客&#xff0c;下…

微信小程序【发送给朋友】和【复制链接】功能,灰色不可用

每日鸡汤&#xff1a;悲观者可能正确&#xff0c;但是乐观者往往成功 假设你是一个用户&#xff0c;你随便找一个小程序可以看到这几个功能 转发给朋友分享到朋友圈复制链接 很常见的功能&#xff0c;但是如果你作为开发者&#xff0c;这几个功能就需要自己做喽&#xff0c;并…