CORS policy: ***No ‘Access-Control-Allow-Origin‘ header is present on the requested resource 跨域的解决办法

正确解决No ‘Access-Control-Allow-Origin’ header is present on the requested resource异常的有效解决方法 阅读详情
AI摘要

本文介绍了解决跨源资源共享(CORS)问题的方法,包括理解和配置跨域请求,利用Spring Boot和Spring Framework API实现跨域访问。

问题概述

关于这个问题,博主是在跨服务调用的时候遇到的,相同的域名,不同的端口,

不同服务间调用,提示跨域:

“ Access to XMLHttpRequest at 'http://***.***.***:****/api/sys/login' from origin 'http://***.***.***:****' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. ”

如下图:

预检请求跨域:

解决办法

关于这个问题,其实很简单,作为一个码农,需要知其然,还需要知其所以然!

(如果只想知其然,解决问题,请划到最下面代码处)

一、什么是跨域?

跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

二、什么是同源策略?

同源策略是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。

三、跨源资源共享(CORS)?

跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。

跨源 HTTP 请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。

出于安全性,浏览器限制脚本内发起的跨源 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。

CORS 机制允许 Web 应用服务器进行跨源访问控制,从而使跨源数据传输得以安全进行。现代浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch)使用 CORS,以降低跨源 HTTP 请求所带来的风险。

四、CORS 概述?

跨源资源共享标准新增了一组 HTTP 标头字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(例如 Cookie 和 HTTP 认证相关数据)。

CORS 请求失败会产生错误,但是为了安全,在 JavaScript 代码层面无法获知到底具体是哪里出了问题。你只能查看浏览器的控制台以得知具体是哪里出现了错误。

五、解决办法一:WebMvcConfigurer(Spring Boot Interface)

通过实现Spring Boot的WebMvcConfigurer接口的跨域方法addCorsMappings,配置跨域标头:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry
                // 对所有路径应用 CORS 配置
                .addMapping("/**")
                // 允许所有域名进行跨域调用
                .allowedOriginPatterns("*")
                // 允许跨域发送cookie
                .allowCredentials(true)
                // 放行全部原始头信息
                .allowedHeaders("*")
                // 允许所有请求方法跨域调用
                .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE")
                // 指定预检请求结果缓存时间
                .maxAge(3600);
    }
}

六、解决办法二:CorsWebFilter (Spring Framework API)

CorsWebFilter 是 Spring Framework 中的一个过滤器,用于处理跨源资源共享(CORS)的请求。CORS 是一种 W3C 规范,它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。

在 Spring WebFlux(响应式编程模型)或 Spring MVC(传统的基于 Servlet 的模型)应用中,可以使用 CorsWebFilter 来配置 CORS 策略。这个过滤器允许自定义哪些源(域、协议和端口)有权访问指定的应用资源,哪些 HTTP 方法被允许,哪些头信息可以被包含,以及预检请求的存活时间等。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;


@Configuration
public class MyCorsConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter() {
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 跨域配置
        // 放行全部原始头信息
        corsConfiguration.addAllowedHeader("*");
        // 允许所有请求方法跨域调用
        corsConfiguration.addAllowedMethod("*");
        // 允许所有域名进行跨域调用
        corsConfiguration.addAllowedOriginPattern("*");
        // 允许跨域发送cookie
        corsConfiguration.setAllowCredentials(true);

        // 对所有路径应用 CORS 配置
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(urlBasedCorsConfigurationSource);
    }
}

七、验证CORS

预检成功!真实请求成功调用! 

参考文献:

【MDN Web Docs】

【CORS protocol】

【CorsWebFilter API】

【UrlBasedCorsConfigurationSource API】

【CorsConfiguration API】


好了,关于 CORS policy: ***No ‘Access-Control-Allow-Origin‘ header is present on the requested resource 跨域的解决办法  就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:优快云 (Chinese Software Developer Network)
原        文:https://blog.youkuaiyun.com/Hello_World_QWP/article/details/140949607
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
出现 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the 解决方法 Access to XMLHttpRequest at 'http://127.0.0.1:5000/api/data' from origin 'http://10.197.0.79:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 阅读详情

相关推荐

解决xxx by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource问题

今天登录ant design pro时,报出登录失败的问题,于是打开控制台,如是:xxx has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.研究几种解决方案。......

念兮为美 4679

No 'Access-Control-Allow-Origin' header is present on the requested resource. 跨域问题!

跨域问题项目背景车祸现场解决问题总结 项目背景 前端:VUE 后端:Java JDK 1.8 Springboot 1.5.12 maven 3.3.9 服务器环境:Linux nginx 数据库:mysql 车祸现场 1、废话不说直接上干货 仔细一点可以看出,No ‘Access-Control-Allow-Origin’ header is present on the requested...

开心就好~~~专栏 19万+

SAP FICO 消息号 FAA_POST042 技术清算科目中的余额:分类账 0L,货币 00、RMB、10000.00-

SAP FICO 消息号 FAA_POST042 技术清算科目中的余额:分类账 0L,货币 00、RMB、10000.00-

我好像病了的博客 2138

No 'Access-Control-Allow-Origin' header is present on the requested resource', 跨域访问的解决方法

当请求不在同一域名下的资源文件(ip地址+端口号)时,会报如下错误: “No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8080’ is therefore not allowed access.”,翻译下,因为被请求的资源没有设置 ‘A...

木子叶的奔跑 33万+

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 225

Chapter2、HDR流水线

HDR内容的获取(不同曝光时间的图片合成) 相机响应函数 HDR视频

qq_55621259的博客 2597

解决CORS跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource

Access to XMLHttpRequest at 'http://192.168.2.170:8000/external/statistics/function' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' head

技术杠精的博客 16万+

【OpenStack】OpenStack原理(一)——OpenStack发展及架构

OpenStack目前的七个核心组件,分别是计算(Compute)、对象存储(Object Storage)、认证(Identity)、用户界面(Dashboard)、块存储(Block Storage)、网络(Network)和镜像服务(Image Service)。

大数据分析BDA 2万+

No ‘Access-Control-Allow-Origin’ header is present on the requested resource异常的解决方案

当浏览器尝试从不同于其源(域、协议或端口)的服务器加载资源时,会触发同源策略(Same-Origin Policy)。然而,有时我们确实需要从不同的源加载资源,这时就需要使用跨源资源共享(CORS,Cross-Origin Resource Sharing)机制。

2301_79779756的博客 1万+

基于QT的华为网络摄像头二次开发

第一次使用华为的网络摄像头并进行二次开发,网上关于QT对华为网络摄像头的二次开发的文章很少,基于项目的需求做了一些工作,特此记录。 目标: 1、实时预览 2、手动控制录制视频 3、监听告警型号 4、实时获取元数据中的划定区域内的人数 摄像头型号如下: 准备工作: 在购买摄像头后,应当在官网下载对应的开发资料,如果需要权限,则联系华为的技术支持人员。下载资料如下: SDC Development Kit Demo 8.0.T9 SDK DEMO下载地址:https://bbs.hua

xumingyifrend的博客 3168

某音私信接口二进制解析

本文探讨了某音私信接口的二进制请求处理过程,重点分析了请求体中的非文本字符和混合编码结构。文章详细描述了编码过程,包括使用Protocol Buffers的序列化方法将结构化数据转换为字节流,并通过Uint8Array包装成二进制数组。作者展示了如何提取和补全s.encode方法,并将其转化为Base64字符串以便在Python中解码执行

码王吴彦祖的博客 900

跨域详解 been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requeste

上面的意思就是 你访问一个什么地址被CORS 协议阻止, 没有 在Hearder 里面发现 Access-Control-Allow-Origin 的参数的 资源 跨域问题的原因:浏览器出于安全考虑,限制访问本站点以为的资源。 比如你有一个 网站 127.0.0.1:8080/ , 并且上面挂了一个页面 ,那么在这个页面中 ,你只访问 本站点的 资源不会受到限制,但是你如果访问其他站点,比如 127.0.0.1:8081 的资源就会受到限制。 备注:暂且把 协议,域名,端口...

hekliu的博客 1万+

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 389

完美解决:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource

分析:当我们请求一个接口的时候,出现如:Access-Control-Allow-Origin 字眼的时候说明请求跨域了。前端是vue,后端是springcloud,完全的前后端分离的项目,前端在向后端发送请求的时候出现如下的错误。把我工作中遇到的问题和解决的问题的过程记录下来,同时希望也可以帮到大家!文件,在该文件内新增配置。

white0718的博客 1万+

电子元件及其规格书的查找与理解

本内容收录:在电子开发或维修过程中,查找电子元件及其规格书心得体会,以及元件规格书的理解,系个人多年实战经验的系统梳理。内容着重介绍贴片元件代码反查型号的实用技巧,并以三款典型疑难元件为例,详述其完整查找过程与最终型号确认。

让你爱上电路设计 3985

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

No ‘Access-Control-Allow-Origin‘ header is present on the requested resource关于vue跨域问题

No 'Access-Control-Allow-Origin' header is present on the requested resource关于vue跨域问题

qq_42212557的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

跨域 No 'Access-Control-Allow-Origin' header is present on the requested resource.

什么是跨域访问 在A网站中,我们希望使用Ajax来获得B网站中的特定内容。如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的。跨域访问违反了同源策略, 同源策略规定,浏览器的ajax只能访问跟它的HTML页面同源(相同域名或IP)的资源。 跨域 ...

小花生编程 18万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

跨域(CORS)请求问题[No 'Access-Control-Allow-Origin' header is present on the requested resource]常见解决方案

基本概念 跨域(CORS)请求:同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 浏览器和服务器实现跨域(CORS)判定的原理 问题描述 ...

无限迭代中...... 2万+

处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题

在开发中,前端同事调用后端同事写好的接口,在地址中是有效的,但在项目的ajax中,浏览器会报 "No 'Access-Control-Allow-Origin' header is present on the requested resource"的错误。 这是由于浏览器禁止ajax请求本地以外的资源,解决办法如下: 后端同事在Controller层的类上增加@CrossOrign注解,当前...

qq_37647296的博客 6万+

解决跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

CORS,全称Cross-Origin Resource Sharing,是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。

一起加油吧! 1万+

CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource

CORS

龙城之家的博客 1573

解决CORS : No ‘Access-Control-Allow-Origin’ header is present on the requested问题 ,Nginx跨域配置。

解决CORS : No ‘Access-Control-Allow-Origin’ header is present on the requested问题 ,Nginx跨域配置。

bk_陈龙伟 5255

解决前后端跨域报错:has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘

来自一个IP端口的页面(前端项目),要访问另一个IP端口的资源(springboot请求接口),会产生跨域访问。

wsaicyj的博客 2万+

记录跨域出错CORS policy: No ‘Access-Control-Allow-Origin‘ header is is present on the requested resource.

CORS policy: No 'Access-Control-Allow-Origin' header is is present on the requested resource.

midouzi_的博客 4077

后台解决跨域问题

出现的问题 解决办法: 1.创建工具类 2.进行实现 package com.shoppingbackstage.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframew

m1s2q3l4的博客 639

No Access-Control-Allow-Origin header is present on the requested resource.解决

出现此问题的原因是 所请求的资源上没有“ Access-Control-Allow-Origin”标头。 这个是域名的问题,比如你本地域名跟测试站域名冲突,因为在代码中已经设置成某个固定的域名了,所以请求接口的时候本地无法访问到测试站域名,所以要找到config文件最初配置域名的地方把他改成本地的域名就可以了 了。 解决跨域问题也很简单,在PHP代码中增加头部即可。 $header['Access-Control-Allow-Origin'] = '*'; $header['Access-Contr

是日已过,命亦随减的博客 1万+
上一篇: failed because the control process exited with error code ...(code=exited, status=1/FAILURE) 的解决办法
下一篇: IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain.. “*“ 的解决办法
TechBro华仔
TechBro华仔 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄11年 5万+粉丝 430原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechBro华仔

日拱一卒无有尽,功不唐捐终入海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值