当前位置: 首页 > news >正文

跨域问题及解决方案

跨域问题不仅影响开发效率,还可能导致项目进度延误。因此,理解和掌握跨域问题的原理及其解决方案对于前端开发者和后端开发者来说都至关重要。本文将详细介绍什么是跨域、跨域产生的原因,以及常见的后端跨域解决方案。

文章目录

  • 一、什么是跨域
  • 二、跨域产生的原因
  • 三、解决策略:
    • 1. CORS(跨域资源共享)
    • 2. 在 SpringBoot 中配置 CORS
      • 2.1 在目标方法中添加`@CrossOrign`注解
      • 2.2 添加Cors过滤器
      • 2.3 实现 `WebMvcConfigurer` 接口,重写 `addcorsMappings` 方法

一、什么是跨域

跨域是指在浏览器的同源策略下,网页上的资源请求涉及不同的协议、域名或端口。即使两个网页属于同一网站,只要协议、域名或端口有所不同,浏览器就会认为这是跨域请求。浏览器出于安全性考虑,会阻止一些跨域请求的数据交互,导致前端无法读取跨域服务器返回的数据,通常会抛出“跨域错误”或类似的警告。

例如,前端的 Vue 应用运行在 http://localhost:8080,而后端的 SpringBoot 服务在 http://localhost:8181,虽然它们都在同一台机器上,但由于端口不同,浏览器会将它们视为不同的源,从而触发跨域问题。

在这里插入图片描述

后端可以接收到请求,也返回了响应结果。但是,浏览器拦截了响应,无法读取后端传来的数据,导致报错。

二、跨域产生的原因

跨域问题的产生主要是由于浏览器的同源策略(Same-Origin Policy)。同源策略是浏览器的一种安全机制,用于限制不同源之间的交互,以防止恶意网站通过脚本访问其他网站的敏感信息(如用户数据、Cookie等)。具体来说:

  • 协议不同:例如 http://example.com 和 https://example.com。
  • 域名不同:例如 http://example.com 和 http://test.example.com。
  • 端口不同:例如 http://example.com:8080 和 http://example.com:8081。

只要协议、域名或端口中的任意一项不同,就会触发同源策略,导致浏览器拦截跨域请求。

示例:
Vue:http://localhost:8080
SpringBoot:http://localhost:8181/list

协议域名端口号
Vuehttplocalhost8080
SpringBoothttplocalhost8181
是否相同×

三、解决策略:

为了解决跨域问题,有多种方法可以通过配置来允许跨域请求。最常见的解决方案是 CORS (Cross-Origin Resource Sharing)。

1. CORS(跨域资源共享)

CORS 是一种由浏览器和服务器共同支持的机制,允许跨源请求。通过在服务器响应头中设置 CORS 相关的字段,浏览器可以允许跨域请求的读取。以下是常用的 CORS 头部字段:

  • Access-Control-Allow-Origin:指定哪些源可以访问资源。值可以是 *(允许所有源)或指定的域名。
  • Access-Control-Allow-Methods:指定允许的 HTTP 方法,如 GET, POST, PUT, DELETE 等。
  • Access-Control-Allow-Headers:指定允许的请求头。
  • Access-Control-Allow-Credentials:是否允许携带 Cookies 或 HTTP 身份认证信息。
  • Access-Control-Max-Age:指定预检请求的缓存时间。

2. 在 SpringBoot 中配置 CORS

在 SpringBoot 中,你可以使用以下几种方式来配置 CORS。

2.1 在目标方法中添加@CrossOrign注解

这种方式适用于少量的跨域请求,你可以在目标方法上直接添加 @CrossOrigin 注解来允许跨域。

@GetMapping("/list")
@crossorigin
public List<string> list(){List<String> list = Arrays.asList("Java","c++","Go");return list;
}

2.2 添加Cors过滤器

如果有很多接口需要支持跨域,使用全局配置更为方便,可以避免在每个方法上都加 @CrossOrigin 注解。

@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*");  // 允许所有来源corsConfiguration.addAllowedHeader("*");  // 允许所有请求头corsConfiguration.addAllowedMethod("*");  // 允许所有HTTP方法UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", corsConfiguration);  // 适用于所有路径return new CorsFilter(source);}
}

2.3 实现 WebMvcConfigurer 接口,重写 addcorsMappings 方法

可以通过实现 WebMvcConfigurer 接口来更加灵活地配置跨域策略

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*")  // 允许所有来源.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS").allowCredentials(true)  // 允许发送 cookies.maxAge(3600)  // 设置预检请求的缓存时间.allowedHeaders("*");  // 允许所有请求头}
}

在这里插入图片描述

相关文章:

跨域问题及解决方案

跨域问题不仅影响开发效率&#xff0c;还可能导致项目进度延误。因此&#xff0c;理解和掌握跨域问题的原理及其解决方案对于前端开发者和后端开发者来说都至关重要。本文将详细介绍什么是跨域、跨域产生的原因&#xff0c;以及常见的后端跨域解决方案。 文章目录 一、什么是跨…...

Python Matplotlib库:从入门到精通

Python Matplotlib库&#xff1a;从入门到精通 在数据分析和科学计算领域&#xff0c;可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一&#xff0c;为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始&#xff0c;逐步掌握其高级用法&…...

相互作用感知的蛋白-小分子对接模型 - Interformer 评测

Interformer 是一个应用于分子对接和亲和力预测的深度学习模型&#xff0c;基于 Graph-Transdormer 架构的模型&#xff0c;利用相互作用&#xff08;氢键、疏水&#xff09;感知的混合密度网络&#xff08;interaction-aware mixture den sity network&#xff0c; MDN&#x…...

力扣【669. 修剪二叉搜索树】Java题解

一开始在想为什么题目说存在唯一答案。然后发现是二叉搜索树就合理了。如下图&#xff1a;如果0节点小于low&#xff0c;那其左子树也都小于low&#xff0c;故可以排除&#xff1b;对于4&#xff0c;其右子树也是可以排除。 代码如下&#xff1a; class Solution {public Tre…...

装机爱好者的纯净工具箱

对于每一位电脑用户来说&#xff0c;新电脑到手后的第一件事通常是检测硬件性能。今天为大家介绍一款开源且无广告的硬件检测工具——入梦工具箱。 主要功能 硬件信息一目了然 打开入梦工具箱&#xff0c;首先看到的是硬件信息概览。这里不仅包含了内存、主板、显卡、硬盘等常…...

Spring Boot 实现文件上传和下载

文章目录 Spring Boot 实现文件上传和下载一、引言二、文件上传1、配置Spring Boot项目2、创建文件上传控制器3、配置文件上传大小限制 三、文件下载1、创建文件下载控制器 四、使用示例1、文件上传2、文件下载 五、总结 Spring Boot 实现文件上传和下载 一、引言 在现代Web应…...

【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)

本文项目编号 T 158 &#xff0c;文末自助获取源码 \color{red}{T158&#xff0c;文末自助获取源码} T158&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

Electron学习笔记,安装环境(1)

1、支持win7的Electron 的版本是18&#xff0c;这里node.js用的是14版本&#xff08;node-v14.21.3-x86.msi&#xff09;云盘有安装包 Electron 18.x (截至2023年仍在维护中): Chromium: 96 Node.js: 14.17.0 2、安装node环境&#xff0c;node-v14.21.3-x86.msi双击运行选择安…...

个人通知~~~

因学业问题&#xff0c;作品发布比较【慢】所以将间隔调整为3天一作 另外声明&#xff1a;二月一号正式改名&#xff1a;饼干帅成渣 &#xff08;谐音&#xff09; 没关住的快关注&#xff0c;求求了。不求点赞&#xff0c;评论&#xff0c;收藏。 最后祝大家新年快乐&…...

C# 中 [MethodImpl(MethodImplOptions.Synchronized)] 的使用详解

总目录 前言 在C#中&#xff0c;[MethodImpl(MethodImplOptions.Synchronized)] 是一个特性&#xff08;attribute&#xff09;&#xff0c;用于标记方法&#xff0c;使其在执行时自动获得锁。这类似于Java中的 synchronized 关键字&#xff0c;确保同一时刻只有一个线程可以执…...

盛水最多的容器

hello 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; function maxArea(height) {// 初始化最大水量为 0let maxWater 0;// 初始化左指针&#xff0c;指向数组的第一个元素let left 0;// 初始化右指针&#xf…...

数据分析系列--①RapidMiner软件安装

目录 一、软件下载及账号注册 1.软件下载 1.1 CSDN下载国内下载,国内镜像相对快,点击下载 1.2 官网软件下载地址:AI Studio 2025.0 ,服务器在国外相对较慢. 2.软件注册 2.1 点击 注册界面 开始注册,如图: 3.邮箱验证 二、软件安装 1. 新年文件夹,名字最好为英文名 2. 双…...

DeepSeek-R1:开源Top推理模型的实现细节、使用与复现

核心观点 ● 直接用强化学习就可以让模型获得显著的推理能力&#xff0c;说明并不一定需要SFT才行。 ● 强化学习并不一定需要复杂的奖励模型&#xff0c;使用简单的规则反而取得意想不到的效果。 ● 通过知识蒸馏让小模型一定程度上也有推理能力&#xff0c;甚至在某些场景下…...

Linux(19)——使用正则表达式匹配文本

新年快乐&#xff01; 目录 一、正则表达式&#xff1a; 二、通过 grep 匹配正则表达式&#xff1a; 三、查找匹配项&#xff1a; 一、正则表达式&#xff1a; 正则表达式使用模式匹配机制查找特定内容&#xff0c;vim、grep 和 less 命令都可以使用正则表达式&#xff0c;P…...

STM32 对射式红外传感器配置

这次用的是STM32F103的开发板&#xff08;这里面的exti.c文件没有how to use this driver 配置说明&#xff09; 对射式红外传感器 由一个红外发光二极管和NPN光电三极管组成&#xff0c;M3固定安装孔&#xff0c;有输出状态指示灯&#xff0c;输出高电平灯灭&#xff0c;输出…...

2025年1月25日(赋值前引用)

pycharm 提示&#xff1a; 局部变量 ‘start_time’ 可能在赋值前引用 局部变量 ‘stop_time’ 可能在赋值前引用 Traceback (most recent call last):File "/home/raspberry/Desktop/python/01_其他/04_超声波/ml_01_超声波测距.py", line 63, in <module>mai…...

C++基础(1)

目录 1. C发展历史 2. C第一个程序 3. 命名空间 3.1 namespace的价值 3.2 命名空间的定义 3.3 命名空间的使用 4. C输入和输出 5. 缺省参数 6. 函数重载 6.1 实现函数重载的条件 6.2 函数重载的应用 1. C发展历史 C的起源可以追溯到1979年&#xff0c;当时Bjarne…...

【第十天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-两种常见的字符串算法(持续更新)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的字符串算法2.字符串算法3.详细的字符串算法1&#xff09;KMP算法2&#xff09;Rabin-Karp算法 总结 前言…...

开发者交流平台项目部署到阿里云服务器教程

本文使用PuTTY软件在本地Windows系统远程控制Linux服务器&#xff1b;其中&#xff0c;Windows系统为Windows 10专业版&#xff0c;Linux系统为CentOS 7.6 64位。 1.工具软件的准备 maven&#xff1a;https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-m…...

一次端口监听正常,tcpdump无法监听到指定端口报文问题分析

tcpdump命令&#xff1a; sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各个部分的详细解释&#xff1a; 1.tcpdump: 这是用于捕获和分析网络数据包的命令行工具。 2.-i ens2f0: 指定监听的网络接口。ens2f0 表示本地网卡&#xff09;&#xff0c;即计算机该指定网络接口捕…...

【C++题解】1393. 与7无关的数?

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1393. 与7无关的数&#xff1f; 类型&#xff1a;简单循环 题目描述&#xff1a; 一个整数&#xff0c;如果这个数能够被 7 整除&#xff0c;或者其中有一位是7&#xff0c;我们称…...

【自学嵌入式(6)天气时钟:软硬件准备、串口模块开发】

天气时钟&#xff1a;软硬件准备、串口模块开发 软硬件准备接线及模块划分ESP8266开发板引脚图软件准备 串口模块编写串口介绍Serial库介绍 近期跟着网上一些教学视频&#xff0c;编写了一个天气时钟&#xff0c;本篇及往后数篇都将围绕天气时钟的制作过程展开。本文先解决硬件…...

高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…...

Kotlin函数式API

Kotlin函数式API 1.maxBy val list listOf("Apple","Banana", "Orange","pear","Grape","Watermelon") val maxLengthFruit list.maxBy {it.length} println(maxLengthFruit) 2.map 集合中zhi的map函数是最…...

我的2024年终总结和2025年展望

我的2024年终总结和2025年展望 一、前言 目前已经回到家两天了&#xff0c;我相信大部分人已经到家了。明天就是过年了。 没想到匆匆又是一年&#xff0c;这一年怎么说&#xff1f; 似乎并不好说&#xff0c;没有想象中的意气风发&#xff0c;有时候还想摆烂&#xff01; 但…...

【Unity3D】实现2D角色/怪物死亡消散粒子效果

核心&#xff1a;这是一个Unity粒子系统自带的一种功能&#xff0c;可将粒子生成控制在一个Texture图片网格范围内&#xff0c;并且粒子颜色会自动采样图片的像素点颜色&#xff0c;之后则是粒子编辑出消散效果。 Particle System1物体&#xff08;爆发式随机速度扩散10000个粒…...

【Docker】Docker入门了解

文章目录 Docker 的核心概念Docker 常用命令示例&#xff1a;构建一个简单的 C 应用容器1. 创建 C 应用2. 创建 Dockerfile3. 构建镜像4. 运行容器 Docker 优势学习 Docker 的下一步 **一、Docker 是什么&#xff1f;****为什么 C 开发者需要 Docker&#xff1f;** **二、核心概…...

threejs实现烟花效果

大家好&#xff01;我是 [数擎 AI]&#xff0c;一位热爱探索新技术的前端开发者&#xff0c;在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情&#xff0c;欢迎关注我的文章&#xff0c;我们一起成长、进步&#xff01; 开发领域&#xff1a;前端开发 | A…...

23【进制的理解】

很多人可能听过计算机的最底层是2进制执行&#xff0c;但是原理并不知道&#xff0c;我们今天先不讨论那么复杂的问题&#xff0c;先讨论什么是进制 1910&#xff0c;10并不是1个字符&#xff0c;而是2个字符&#xff0c;也就是说在10进制里面没有“10”这个字符&#xff0c;1…...

VMware 和本机(Win10)安装共享文件

1. 安装VM-tools, sudo apt-get install open-vm-tools-desktop -y 2. VMware->设置-> 选项中启动共享文件夹. 3. 本机设置共享文件夹(文件目录为data)&#xff0c;右键属性设置: VMware&#xff0c; Other Locations->Computer->mnt->data 即可。 ps: 还有个…...

整数转罗马数字

hello 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; function intToRoman(num) {// 定义罗马数字符号和对应的整数值&#xff0c;按照从大到小的顺序排列const values [1000, 900, 500, 400, 100, 90, 50, 40,…...

数据结构--树

树的基本概念 树&#xff1a;一个或多个节点的有限集合。 存在一个称为根的特定节点&#xff0c;其余的节点被分为n个互不相交的集合T1&#xff0c;T2&#xff0c;…&#xff0c;Tn&#xff0c;其中的每一个集合都是一棵树。T1&#xff0c;T2&#xff0c;…&#xff0c;Tn称为根…...

Next.js 14 TS 中使用jwt 和 App Router 进行管理

jwt是一个很基础的工作。但是因为架构不一样&#xff0c;就算是相同的架构&#xff0c;版本不一样&#xff0c;加jwt都会有一定的差别。现在我们的项目是Next.js 14 TS 的 App Router项目&#xff08;就是没有pages那种&#xff09;&#xff0c;添加jwt的步骤&#xff1a; 1、…...

oracle 分区表介绍

oracle 分区表介绍 Oracle 分区表是一个非常强大的数据库功能&#xff0c;可以将一个大的表分割成多个更小、更易管理的块&#xff08;分区&#xff09;。这种分区结构在处理大规模数据时非常有用&#xff0c;因为它能改善性能、简化维护和管理&#xff0c;并支持高效的数据存取…...

TypeScript 学习 -类型 - 9

声明合并 成员变量合并&#xff1a;成员变量会合并&#xff0c;但类型必须一致。成员函数合并&#xff1a;如果函数签名不同&#xff0c;合并后的函数会是签名的联合类型。接口声明顺序&#xff1a;在同一个接口内按顺序合并&#xff1b;不同接口时&#xff0c;后声明的会覆盖…...

996引擎 - 前期准备-配置开发环境

996引擎 - 前期准备 官网搭建服务端、客户端单机搭建开发环境配置后端开发环境配置环境前端开发环境配置环境后端简介前端简介GUILayoutGUIExport官网 996传奇引擎官网 所有资料从官网首页开始,多探索。 文档: 996M2-服务端Lua 996M2-客户端Lua 搭建服务端、客户端 这个教…...

python-decouple和 django-environ管理 Python/Django 项目中的环境变量

在现代软件开发中,环境变量的管理是一个至关重要的任务。环境变量通常用于存储敏感信息(如 API 密钥、数据库凭据)或配置信息(如调试模式、日志级别)。为了更安全、更方便地管理环境变量,Python 社区提供了许多工具,其中最流行的两个是 python-decouple 和 django-envir…...

FileReader使用

FileReader : 读取文件内容的api&#xff0c;&#xff0c;&#xff0c;在前端处理上传的文件&#xff0c;&#xff0c;比如预览图片 readAsDataURL(file) &#xff1a; 读取为base64编码的 data urlreadAsText() &#xff1a; 读取为文本readAsArrayBuffer() : 读取为二进制 …...

npm cnpm pnpm npx yarn的区别

npm、cnpm、pnpm、npx、yarn 这几个工具都与 Node.js 项目的包管理和命令执行相关&#xff0c;它们的区别具体如下&#xff1a; 本质与功能定位 npm&#xff1a;是 Node.js 官方的包管理工具&#xff0c;提供了安装、卸载、更新、发布等全方位的包管理功能&#xff0c;还能通…...

knots = unique(knots, ‘stable‘);区别引用

【问题】knots unique(knots, stable); 和unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 的区别 【解释】knots unique(knots, stable); 和 unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 两段代码的主要区别在于它们处理重…...

c++ 定点 new

&#xff08;1&#xff09; 代码距离&#xff1a; #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…...

无人机如何自主侦察?UEAVAD:基于视觉的无人机主动目标探测与导航数据集

作者&#xff1a;Xinhua Jiang, Tianpeng Liu, Li Liu, Zhen Liu, and Yongxiang Liu 单位&#xff1a;国防科技大学电子科学学院 论文标题&#xff1a;UEVAVD: A Dataset for Developing UAV’s Eye View Active Object Detection 论文链接&#xff1a;https://arxiv.org/p…...

怎样在PPT中启用演讲者视图功能?

怎样在PPT中启用演讲者视图功能&#xff1f; 如果你曾经参加过重要的会议或者演讲&#xff0c;你就会知道&#xff0c;演讲者视图&#xff08;Presenter View&#xff09;对PPT展示至关重要。它不仅能帮助演讲者更好地掌控演讲节奏&#xff0c;还能提供额外的提示和支持&#…...

大语言模型LLM在地理信息GIS中应用场景

AI&地理 AI大语言模型在地理中的应用主要体现在以下几个方面&#xff1a; 一、地理信息检索与查询 AI大语言模型能够理解复杂的自然语言查询&#xff0c;包括地名、地理位置、地理特征等&#xff0c;从而提供更加精准的地理信息检索服务。例如&#xff0c;用户可以通过自…...

AI常见的算法

人工智能&#xff08;AI&#xff09;中常见的算法分为多个领域&#xff0c;如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途&#xff1a; 1. 机器学习 (Machine Learning) 监督学习 (Supervised Learning) 线性回归 (Linear Regr…...

借DeepSeek-R1东风,开启创业新机遇

DeepSeek-R1的崛起 DeepSeek-R1的推出引发了广泛关注&#xff0c;在AI领域引起了一阵旋风。作为新一代的智能模型&#xff0c;它在多项任务中表现出了卓越的能力。普通人可以借助这个强大的工具&#xff0c;开启属于自己的创业之路&#xff0c;抓住时代带来的机遇。 内容创作…...

知识库建设对提升团队协作与创新能力的影响分析

内容概要 在当今快速变革的商业环境中&#xff0c;知识库建设的重要性愈发凸显。它不仅是信息存储的载体&#xff0c;更是推动组织内部沟通与协作的基石。通过系统整理与管理企业知识&#xff0c;团队成员能够便捷地访问相关信息&#xff0c;使得协作过程更为流畅&#xff0c;…...

Mongodb 慢查询日志分析 - 1

Mongodb 慢查询日志分析 使用 mloginfo 处理过的日志会在控制台输出, 显示还是比较友好的. 但是如果内容较大, 就不方便查看了, 如果可以导入到 excel 就比较方便筛选/排序. 但是 mloginfo 并没有提供生成到 excel 的功能. 可以通过一个 python 脚本辅助生成: import pandas…...

fps一些内容添加

1 增强输入要点记录 输入 &#xff1a;输入值的类型 布尔 1d&#xff0c;2d&#xff0c;3d 映射&#xff1a;就是确定按键输入键位&#xff0c;输入类型&#xff0c;和一些触发器&#xff08;按键方式&#xff09;修改器&#xff08;对输出值进行修改&#xff09; 基本的&am…...

从单体应用到微服务的迁移过程

目录 1. 理解单体应用与微服务架构2. 微服务架构的优势3. 迁移的步骤步骤 1&#xff1a;评估当前单体应用步骤 2&#xff1a;确定服务边界步骤 3&#xff1a;逐步拆分单体应用步骤 4&#xff1a;微服务的基础设施和工具步骤 5&#xff1a;管理和优化微服务步骤 6&#xff1a;逐…...