Springboot解决跨域问题

Springboot解决跨域问题

跨域问题产生于浏览器的同源策略(Same-Origin Policy)。同源策略是一种安全机制,它限制了一个网页从一个源加载的资源如何与来自另一个源的资源进行交互。同源是指协议、域名和端口号完全相同。

例如,当网页 http://domain1.com/index.html 试图通过 XMLHttpRequest 请求 http://api.domain2.com/data.json 时,由于它们的域名不同(domain1.com 和 domain2.com),浏览器会阻止这种跨域请求。

常见的跨域问题

不同的协议

  • 例子: 在一个页面中,从 http:// 发起的请求试图访问 https:// 的资源。
  • 原因: 即使是相同的域名,不同的协议也被视为不同的源。因此,http://https:// 之间的请求也会触发跨域限制。

不同的端口

  • 例子: 一个页面通过 http://domain.com:3000 发起请求到 http://domain.com:4000
  • 原因: 即使是相同的域名,不同的端口号也被视为不同的源。跨端口的请求也会被同源策略限制。

子域名不同

  • 例子: 一个页面从 sub.domain.com 请求 domain.com 下的资源。
  • 原因: 即使是父域相同,子域名不同也被认为是不同的源,因此也会受到同源策略的限制。

文件协议(file://)

  • 例子: 一个本地 HTML 文件通过 file:// 协议打开,并尝试请求其他本地文件或远程资源。
  • 原因: file:// 协议的页面通常被认为是一个单独的源,与网络上的域不同。

不同的域名后缀

  • 例子: 一个页面从 .com 请求 .org 的资源。
  • 原因: 浏览器通常将不同的顶级域名(TLD)视为不同的源。

跨域限制主要是由于浏览器的同源策略所导致的安全限制。为了在这些情况下进行跨域请求,需要服务器端配置 CORS 或使用其他跨域解决方案。

代码

为了解决跨域问题,可以使用 CORS(跨域资源共享)。CORS 是一种机制,允许服务器告知浏览器是否允许跨域请求。通过在服务器端设置响应头部信息,允许来自其他源的请求访问资源

在 Spring Boot 中通过创建 CorsConfig 类并实现 WebMvcConfigurer 接口的 addCorsMappings 方法,实际上是配置了跨域资源共享(CORS)的策略。底层原理是通过在 HTTP 头部添加特定的 CORS 相关的响应头来允许跨域请求。

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 映射所有的路径.allowedOrigins("*") // 允许所有来源的请求.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的 HTTP 方法.allowedHeaders("*") // 允许所有请求头.allowCredentials(true) // 允许发送凭证信息(例如,Cookies).maxAge(3600); // 设置预检请求缓存时间(1小时)}
}

底层原理

1. 预检请求(Preflight Requests)

当浏览器检测到一个跨域请求(例如,使用 XMLHttpRequest 或 Fetch API 发起的跨域请求),它会首先发起一个预检请求(Preflight Request),以确定实际请求是否安全。

2. 预检请求的处理

预检请求是一个 HTTP OPTIONS 请求,包含了跨域请求所需的头部信息(例如,请求方法、请求头等)。服务器在收到这个预检请求时,会根据配置的 CORS 策略进行处理。

3. CORS 配置

在 Spring Boot 中,通过创建 CorsConfig 类并实现 WebMvcConfigurer 接口的 addCorsMappings 方法,设置了 CORS 相关的配置信息:

  • .allowedOriginPatterns("*"):允许所有来源的请求。
  • .allowedHeaders(CorsConfiguration.ALL):允许所有请求头。
  • .allowedMethods(CorsConfiguration.ALL):允许所有请求方法。
  • .allowCredentials(true):允许发送凭证(例如,Cookies)。
  • .maxAge(3600):预检请求的最大缓存时间,避免频繁发起预检请求。

4. 添加 CORS 响应头

当预检请求被服务器接受后,服务器会在实际的响应中添加 CORS 相关的响应头,例如 Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headers 等。

5. 浏览器的安全机制

浏览器收到带有 CORS 相关响应头的实际响应后,会根据这些头部信息来判断是否允许跨域请求。如果得到允许,浏览器将处理实际的请求;如果不允许,则浏览器会阻止该跨域请求。

因此,通过配置 Spring Boot 应用的 CORS 策略,实际上是在服务器端告知浏览器,允许特定来源的请求访问资源,并设置允许的请求头、请求方法、是否发送凭证等信息,从而解决跨域问题。这样浏览器在收到响应头后,就会允许相应的跨域请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STC进阶开发(三)蜂鸣器、RTC时钟、I2C总线、外部中断、RTC闹钟设置、RTC计时器设置

前言 这一期我们首先学习如何让蜂鸣器响起来,并且如何让蜂鸣器发出简单的歌曲,然后我们介绍RTC时钟,要想明白RTC时钟,我们还需要先介绍I2C总线和外部中断。接下来就开始这一期的学习吧! 蜂鸣器 简单介绍 蜂鸣器是一种…

opencv期末练习题(2)附带解析

图像插值与缩放 %matplotlib inline import cv2 import matplotlib.pyplot as plt def imshow(img,grayFalse,bgr_modeFalse):if gray:img cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.imshow(img,cmap"gray")else:if not bgr_mode:img cv2.cvtColor(img,cv2.COLOR_B…

Selenium教程06:单选框+多选框+下拉框组件的示例练习

1.Radio单选框的示例用法&#xff0c;通过网页元素class和type属性多条件共同定位元素&#xff0c;模拟依次选中Android&#xff0c;Apple&#xff0c;Windows。 网页元素结构 <input type"radio" class"ivu-radio-input" name"ivuRadioGroup_170…

固定资产盘点系统设计与实现

固定资产盘点系统设计与实现 最近的业务需求不多&#xff0c;趁着闲的时候&#xff0c;顺便搞了个IT固定资产盘点系统&#xff0c;难度不大&#xff0c;比较实用&#xff0c;这个系统将来可以用在整个财务方面的固定资产盘点&#xff0c;结合Zebra的PDA扫描枪&#xff0c;还是比…

大模型与大模型的幻觉问题

参考 大模型中的涌现 OpenAI 科学家&#xff1a;幻觉是大模型与生俱来的特性&#xff0c;而非缺陷 大模型「幻觉」&#xff0c;看这一篇就够了&#xff5c;哈工大华为出品 大模型 什么是大模型 大语言模型&#xff08;LLM&#xff09;是基于海量文本数据训练的深度学习模型…

【数据结构】手撕排序(排序的概念及意义、直接插入和希尔排序的实现及分析)

目录 一、排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 二、插入排序 2.1基本思想&#xff1a; 2.2直接插入排序&#xff1a; 2.3步骤&#xff1a; 2.4直接插入排序的实现 三、希尔排序( 缩小增量排序 ) 3.1希尔排序的发展历史 3.2 希尔…

子进程继承了内存映射mmap导致flock文件锁泄露

背景 想要利用文件锁在进程退出时自动释放的机制&#xff0c;让守护进程管擦某些资源的释放&#xff0c;并执行相关清理/重启工作。然而发现守护进程在父进程退出时永远饿死。 问题伪代码 主进程子进程 安装信号捕获&#xff0c;每当有信号时print并退出&#xff0c;对子进…

解决跨域问题(SpringBoot)

“什么是跨域&#xff1f;” 跨域 &#xff08;Cross-Origin&#xff09; 是指在浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;下&#xff0c;一个网页的源&#xff08;指协议、域名、端口号的组合&#xff09;与另一个网页的源不同。因此&#xff0c;不同源的…

提升WiFi安全的有效措施

今天买了一个USB无线网卡&#xff0c;想知道这个黑客攻击WiFi的基本流程是怎么样的&#xff0c;买回来意外就发生了&#xff0c;哈哈&#xff1a;这个网卡只支持2GWiFi网络类型&#xff0c;并且不支持WPA3网络加密方式。 你不能希望黑客永远是一个有很多钱的人&#xff0c;或许…

如何提高提问的水平?

以下是由 Google Bard 的回答。 提高提问水平&#xff0c;可以从以下几个方面入手&#xff1a; 明确问题的目的。 提问之前&#xff0c;先明确自己想通过提问达到什么目的。是想获得某个信息&#xff1f;是想了解某个概念&#xff1f;还是想解决某个问题&#xff1f;明确目的&…

综合场景搭建、在线分享,这款地理空间数据管理软件功能太多了!

《四维轻云》是一款轻量化的地理空间数据管理云平台&#xff0c;支持地理空间数据的在线管理、编辑及分享。平台具有项目管理、数据上传、场景搭建、发布分享、SDK开发等功能模块&#xff0c;支持多用户在线协作管理&#xff0c;实现了轻量化、便捷化的空间数据应用。 一、发布…

YOLOv5改进Shape-IoU损失函数:元旦假期最新 IoU论文 | 考虑边界框形状和比例的更准确的指标,YOLO性能提升

💡本篇内容:YOLOv5改进Shape-IoU损失函数:元旦假期最新 IoU论文 | 考虑边界框形状和比例的更准确的指标,YOLO性能提升 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡论文地址:https://arxiv.org/abs/2312.17663 2023年12月…

linux下超级程序!在linux界面实现类图像化界面的操作体验!

linux下超级程序&#xff01;在linux界面实现类图像化界面的操作体验&#xff01; 本期带来一个超级程序&#xff01;在linux界面实现类图像化界面的操作体验。具体功能代码如下: 1500行完整代码想要完成部署&#xff0c;只需在本地创建一个LinuxGJ.sh的文件&#xff0c;然后…

vue+ts element-plu是页码器根据屏幕宽度变化,解决刷新后初始化值问题

实现思路&#xff1a;组件挂载后执行初始化操作&#xff0c;初始化添加事件监听器&#xff0c;当浏览器窗口大小发生变化时会调用这个函数handleResize <el-pagination v-model:current-page"currentPage" background :total"total" layout"prev,…

Go中interface != nil不一定不是nil

摘要&#xff1a; interface{} 值 ! nil不一定不是nil&#xff0c;应使用reflect库判断是否是nil。 测试示例&#xff1a; // todo interface ! nil 不一定 不是nil var value map[string]interface{} reqMap : make(map[string]interface{}) reqMap["key"] valu…

Vue.js 3.4版本发布:解析速度提升2倍,双向绑定革新等新功能

引言 随着2024年的来临,Vue团队的领军人物Evan You宣布了Vue.js 3.4的发布。这个版本不仅仅是修复了一些bug,还带来了一些非常实用的新功能和性能提升。 解析速度提升2倍 这次更新中,Vue.js 3.4实现了解析速度的大幅提升。尤其是在构建模板和脚本的源代码映射时,单文件组…

优维科技2024战略定位:新一代运维核心系统提供商

01 经济复苏「走远路」 过去几年&#xff0c;全球经济持续低迷&#xff0c;2024会迎来转机吗&#xff1f; 回顾2023年&#xff0c;尽管经济复苏动能式微&#xff0c;但全球经济因有效控制通胀而展现出来的韧性&#xff0c;让包括中国在内的大部分经济体躲过了深度衰退的陷阱&…

C语言所有操作符总结

目录 算术操作符&#xff1a; 移位操作符&#xff1a; 位操作符&#xff1a; 赋值操作符&#xff1a; 单目操作符&#xff1a; 关系操作符&#xff1a; 逻辑操作符&#xff1a; 以及特殊的操作符&#xff08;条件&#xff0c;逗号&#xff0c;下标&#xff0c;调用&…

鸿蒙开发第一天

一、开发准备工作 1、开发工具的安装 1&#xff09;下载地址&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/ 2&#xff09;查询API文档链接&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/syscap-00000014080893…

Spring之bean的实例化方式

1.使用构造方法实例化bean&#xff08;利用反射&#xff09; import lombok.Data;Data public class People {private String name;private Integer age;private String eat; }<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http:/…