Access to image at ‘xxx‘ from origin ‘xxx‘ has been blocked by CORS policy解决方案

如图所示,控制台出现下面的报错:

但是正常加载了图片

这个错误表明你尝试从某个源(origin)加载阿里云上的图片时,浏览器因为CORS(跨源资源共享)策略阻止了这次请求尽管图片能正常显示,但浏览器的控制台仍然会报告这个误,因为请求不满足CORS的要求。 

什么是CORS?

CORS是一个安全特性,它允许网页上的脚本(如JavaScript)访问来自不同源(domain, protocol, 或 port)的资源,但前提是这些资源必须明确允许这种跨源请求。这通常通过在服务器端设置响应头(headers)来实现的,特别是

Access-Control-Allow-Origin

这个响应头。

解决方案:

1.检查前端代码

确保你的前端代码没有以非标准的方式(如通过AJAX或Fetch API去加载图片,因为这可能会导致CORS问题。图片通常应该通过<img>标签CSS背景图片等方式加载

 <div class="user" @click="editCropper()">
<img v-bind:src="options.img" title="点击上传头像" />
</div>

 2.清除或停用浏览器缓存(最简单)

有时候,浏览器缓存可能会导致CORS问题。尝试清除缓存或使用无痕浏览模式再次加载页面。

或者在网络那里禁用浏览器缓存(下图所示)

原因:

当浏览器缓存了一个跨域资源(如图片)时,它会保存与该资源相关的所有信息,包括CORS相关的HTTP头(如Access-Control-Allow-Origin)。如果CORS策略后来发生了更改(例如,允许了新的源),但由于缓存的存在,浏览器可能仍然会使用旧的、不允许新源的CORS头信息

 

 停用浏览器缓存 可能对网页的性能用户体验产生负面影响,因为缓存可以减少不必要的网络请求和延迟。因此,在解决CORS问题时,应该优先考虑在服务器端配置正确的CORS策略,而不是简单地停用浏览器缓存。

3.检查并修改图片资源的CORS设置:

如果图片是存储在阿里云的对象存储服务(如OSS)中,你可以为该资源或整个存储桶设置CORS规则。这样,当浏览器发起跨源请求时,OSS会返回适当的CORS响应头。

在OSS中,你可以通过控制台或API来配置CORS规则。通常,你需要添加类似以下的规则:

[  
    {  
        "AllowedOrigin": "*",  
        "AllowedMethod": ["GET", "HEAD", "PUT", "POST", "DELETE"],  
        "AllowedHeader": ["*"],  
        "ExposeHeader": ["x-oss-request-id"]  还有ETag、x-oss-version-id
    }  
]

x-oss-request-id:
        是一个非标准的HTTP响应头,通常由对象存储服务(如阿里云OSS)添加的
它代表了一个唯一的请求标识符用于跟踪和诊断请求。如果在使用对象存储服务时遇到问题,您可以将这个ID提供给服务提供商,以便他们能够快速定位并解决问题。

x-oss-version-id:
       也是一个非标准的HTTP响应头,与版本控制的对象存储服务相关
当您在对象存储服务中启用了版本控制功能时,每次对对象的修改都会创建一个新的版本,并分配一个唯一的版本号。
x-oss-version-id头包含了与响应中返回的对象版本相对应的唯一版本号。这允许您明确知道正在查看或操作的是哪个版本的对象

 ETag:
       是一个HTTP响应头,它用于验证一个资源的当前版本。它通常是一个哈希值,代表了资源的某个特定版本的状态
当客户端请求一个资源时,它可以包含一个If-None-Match头,其中包含了它之前接收到的ETag值。如果资源自上次请求以来没有改变(即ETag值相同),服务器会返回一个304 Not Modified响应,而不是重新发送资源的内容。
ETag的主要用途缓存验证,帮助减少不必要的网络传输

注意:将AllowedOrigin设置为*意味着允许所有源访问。为了安全起见,你可以将其限制为具体的域名

4.使用代理服务

如果你不能修改OSS的CORS设置,或者出于某种原因不想这样做,你可以设置一个代理服务来请求图片,并将图片作为你自己的服务器上的资源提供给前端。这样,所有的请求都会是同源的,从而避免了CORS问题

同源:协议、域名、端口号都相同)

解释:

想象一下,你在网上购物,你想从一家商店(目标服务器)买一件商品,但是这家商店只允许同一家商场(同源)的顾客购买。由于你来自另一家商场(不同源),你无法直接购买这件商品。这就是所谓的跨域问题。

然而,幸运的是,有一家中间商(代理服务器)愿意帮助你。这个中间商位于你和目标商店之间。你可以告诉中间商你想要买的商品,然后中间商会代替你去目标商店购买,并将商品带给你。因为中间商和目标商店在同一个商场(或者至少目标商店信任这个中间商),所以目标商店允许中间商购买商品。

这样一来,即使你原本不能直接从目标商店购买商品,通过中间商的帮助,你还是能够成功购买到商品。这就是代理服务器如何帮助避免跨域问题的原理。客户端(你)通过代理服务器(中间商)与目标服务器(目标商店)通信,绕过了浏览器对跨域请求的限制。

通过这种方式,代理服务器充当了客户端和目标服务器之间的桥梁使得跨域请求得以成功执行

5.使用其他技术

但这些技术并不都适用于图片加载,就比如JSONP是基于<script>标签的,而图片是通过<img>标签或CSS加载的

其他能够实现的:

使用CDN(内容分发网络)

CDN通常支持跨域资源共享。你可以将图片推送到CDN,并使用CDN的URL来加载图片。CDN会处理CORS相关的配置,确保图片可以被正确加载。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Midjourney应用场景、特点、生成图片带来影响

Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人&#xff0c;旨在提供多领域的智能对话服务。本文主要介绍Midjourney的应用场景、功能特点、图片生成后可以做什么&#xff1f; 一、Midjourney应用场景 Midjourney的应用场景相当广泛&#xff0c;以下是一些主要的适用…

迈威通信TSN工业自动化系统解决方案助力智能制造实现确定性服务

工业4.0时代&#xff0c;IT与OT的融合已成为制造企业数字化转型的关键。然而&#xff0c;传统OT网络与IT网络的差异给融合带来了重重挑战。例如&#xff0c;当传送带通过PROFINET协议与HMI通讯时&#xff0c;兼容性问题凸显;硬件实时运动控制采用EtherCAT协议&#xff0c;机械臂…

基于GIS的各类地图样式作品的欣赏,真的不一般。

GIS&#xff08;地理信息系统&#xff09;提供了丰富的地图数据&#xff0c;为地图可视化开发提供了基础数据。在GIS的基础上&#xff0c;您可以根据需求和目的&#xff0c;采用不同的可视化样式来展示地图数据。 以下是一些常见的地图可视化样式&#xff1a; 点状标记&#x…

Nat Hum Behav | 人类前额叶皮层非空间注意力的因果相位依赖性控制

摘要 非空间注意力是一种基本的认知机制&#xff0c;它使个体能够将意识的焦点从无关刺激转向与行为目标相关的感觉信息上。有人提出了一种关于注意力是由前额叶皮层中缓慢兴奋性波动的持续相位所调节的假设&#xff0c;但这一假设存在争议且尚未达成共识。在这里&#xff0c;…

angr使用学习

首先我是直接在kali中安装的&#xff0c;也是边练边学的。 嗯&#xff0c;要在纯净python环境&#xff0c;所以是在 virtualenv 虚拟环境里&#xff0c;也不是特别会用这个&#xff0c;按照教程一步步做的 source venv/bin/activate 进入了对应环境 退出是 deactivate en,ipy…

精准控制,无缝集成:EC-Master与LxWin的EtherCAT主站解决方案

在今天&#xff0c;越来越多的制造业客户选择自动化智能化转型&#xff0c;自动化智能化促进了人机交互、数据互通与自动化控制的发展。随着工业4.0和智能制造的推进&#xff0c;对高速、低时延、高性能的需求在自动化控制领域日益增长。 在这一背景下&#xff0c;EtherCAT&am…

C++相关概念和易错语法(14)(初始化注意事项、vector、编译器向上查找规则)

1.当我们在代码中想要终止运行的话&#xff0c;我们可以采用Ctrl C或Ctrl Z&#xff0c;其中^C代表杀进程&#xff0c;^Z设置结束2.编码表&#xff1a;我们目前比较熟悉的是ASCII码编码方式&#xff0c;但是我们发现平时使用的汉字无法通过ASCII编码&#xff0c;除此之外&…

1个逗号,提升Python代码质量

有些时候&#xff0c;我们会在Python代码中看到列表或其他科迭代对象的结尾会存在一个逗号&#xff1a; 而且编辑器和解释器都容许这种逗号的存在&#xff0c;它就叫作拖尾逗号。 通常是为了在频繁地增减数组元素的时候同时保证语法的正确&#xff0c;且拖尾逗号不占用数组的长…

气膜建筑:寿命、优势与应用—轻空间

近年来&#xff0c;气膜建筑因其独特的结构和众多优势&#xff0c;逐渐成为建筑领域的热门选择。气膜建筑使用寿命长&#xff0c;且在建造速度、成本、安全性、节能环保和舒适性等方面具有显著优势。轻空间将详细探讨气膜建筑的使用寿命、主要优势及其在不同领域的广泛应用。 气…

【从C++到Java一周速成】章节10:封装、继承、方法的重写、多态

章节10&#xff1a;封装、继承、方法的重写、多态 【1】封装1.高内聚&#xff0c;低耦合2.代码层面的体现 【2】继承【3】方法的重写【4】多态 【1】封装 1.高内聚&#xff0c;低耦合 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b;…

JSX语法看这一篇就够了-02

JSX and React 是相互独立的两种开发语言&#xff0c;它们经常一起使用&#xff0c;但也可以单独使用它们中的任意一个&#xff0c;JSX 是JavaScript 语言的扩展&#xff0c;而 React 则是一个 JavaScript 的库。 概述简介 JSX简介 JSX全称 javascriptXML&#xff0c;是Faceb…

cmake编译redis6.0源码总结

1配置clion使用cygwin模拟linux环境&#xff0c;先下载cygwin后配置 2导入源码&#xff0c;配置cmake文件 由于redis是基于Linux上的Makefile&#xff0c;所以Windows上需要配置CMakeLists.txt使用cmake工具编译运行。github上已经有人尝试编写CMakeLists.txt文件&#xff0c…

软件测评的重要性

软件测评的必要性体现在多个方面&#xff0c;以下是其主要原因&#xff1a; 质量保障&#xff1a;软件测评的首要目标是确保软件的质量。通过系统的测试&#xff0c;可以发现软件中的缺陷、错误或不符合需求的地方&#xff0c;从而及时进行修复和改进。这有助于保证软件在实际…

怎么录制直播视频教程?一看就会的方法分享

随着网络直播的兴起&#xff0c;无论是教学、会议还是娱乐&#xff0c;直播视频已成为人们日常生活和工作中不可或缺的一部分。录制直播视频教程不仅可以帮助我们回顾和分享精彩瞬间&#xff0c;还能为观众提供便捷的学习资源。可是怎么录制直播视频教程呢&#xff1f;本文将介…

轻松同步:将照片从三星手机传输到iPad的简便方法

概括 想要在新 iPad 上查看三星照片吗&#xff1f;但是&#xff0c;如果您不知道如何将照片从三星手机传输到 iPad&#xff0c;则无法在 iPad 上查看图片。为此&#xff0c;本文分享了 7 个有用的方法&#xff0c;以便您可以使用它们在不同操作系统之间轻松发送照片。现在&…

炫酷gdb

在VS里面调试很方便对吧&#xff1f;&#xff08;F5直接调试&#xff0c;F10逐过程调试--不进函数&#xff0c;F11逐语句调试--进函数&#xff0c;F9创建断点&#xff09;&#xff0c;那在Linux中怎么调试呢&#xff1f; 我们需要用到一个工具&#xff1a;gdb 我们知道VS中程…

ARM-2

c语言实现三盏灯的控制 #ifndef __LED_H__ #define __LED_H__typedef struct {volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDER;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsig…

问题与解决:element ui垂直菜单展开后显示不全

比如我这个垂直菜单展开后&#xff0c;其实系统管理下面还有其他子菜单&#xff0c;但是显示不出来了。 解决方法很简单&#xff0c;只需要在菜单外面包一层el-scrollbar&#xff0c;并且将高度设置为100vh。

【计算机视觉(2)】

基于Python的OpenCV基础入门——视频的处理 视频OpenCV视频处理操作&#xff1a;创建视频对象判断视频是否成功初始化读取视频帧获取视频特征设置视频参数声明编码器保存视频释放视频对象 视频处理基本操作的代码实现&#xff1a; 视频 视频是由一系列连续的图像帧组成的。每一…

Java学习【接口的使用实例,浅克隆与深克隆】

Java学习【接口的使用实例&#xff0c;浅拷贝与深拷贝】 Comparable接口String类型比较多个对象的比较 Comparator接口Cloneable接口浅拷贝深拷贝 Comparable接口 当我们想要比较两个基本数据类型的大小时直接用 > , < , 就可以了&#xff0c;那么如果是自定义的类要根…