设置跨域规则后调用OSS时仍然报“No ‘Access-Control-Allow-Origin’”的错误

跨域报错解决

设置跨域规则后调用OSS时仍然报“No ‘Access-Control-Allow-Origin’”的错误

为了实现跨域访问,保证跨域数据传输的安全进行,在OSS控制台设置了跨域CORS规则后,通过SDK进行程序调用时报以下错误。

No ‘Access-Control-Allow-Origin’ header is present on the requested resource
问题原因
出现跨域问题的原因如下:

跨域CORS规则设置异常
未正确设置CORS规则。
浏览器缓存
设置了CORS跨域规则,但是存在浏览器缓存,导致读取了缓存中未含有跨域头的Response Header。
解决方案
不同的问题原因对应的解决方法不同,建议先清除浏览器缓存进行测试。如果仍然报错,请参见以下步骤排查CORS跨域规则是否设置正确:

登录OSS控制台的Bucket列表。单击目标Bucket,进入Bucket概览页面。
在左侧导航栏中选择权限管理>跨域设置,然后单击设置。

将来源设置为*,允许Methods全部勾选,允许Headers设置为*,暴露Headers设置为Etag和x-oss-request-id,缓存时间设置为0,选中返回Vary: Origin。关于如何设置跨域规则,请参见设置跨域访问。
注意:选中 返回Vary: Origin以避免本地缓存错乱,可能会造成浏览器访问次数或者CDN回源次数增加。

若问题仍然未解决,请任意登录一台服务器,执行以下命令,查看跨域请求头。
curl -voa ‘[ U R L 1 ] ′ − H ′ O r i g i n : [ URL1]' -H 'Origin:[ URL1]HOrigin:[URL2]’
说明:
[ U R L 1 ] 为需要请求的 O S S 资源链接。 [ URL1]为需要请求的OSS资源链接。 [ URL1]为需要请求的OSS资源链接。[URL2]为您配置跨域规则的来源地址。
系统显示类似如下。

如果出现返回结果存在一个跨域头且符合您配置的跨域头,那么出现跨域问题,可能是由于缓存问题导致,请参考以下解决方法:
您第一次请求没有触发跨域,返回的数据被本地缓存,而第二次触发跨域的请求没有请求服务器端,而是直接获取本地的缓存,导致跨域校验失败。
在浏览器页面单击Ctrl+F5,清理浏览器缓存,然后在测试跨域问题是否还存在。
您将该OSS资源跨域配置的缓存时间设置为0,这样可避免该资源在客户端进行缓存,每次请求都会重新在服务器端获取鉴权信息。
说明:您可以在上传文件时设置文件的cache-control为no-cache,已经上传的文件可以使用ossutil工具进行更改,如何设置cache-control请参见 set-meta(管理文件元信息)。
使用CDN加速OSS,详情请参见CDN如何通过HTTP头配置跨域资源共享(CORS),这样CDN所有请求都会返回CORS头。
如果出现返回结果存在两个跨域头或者不符合您在OSS配置的跨域头,那么出现跨域问题,可能是由于使用了CDN加速OSS:
登录CDN控制台,临时取消CDN加速OSS,确认跨域问题不存在。
确认后,单击具体的域名,依次单击缓存配置>自定义HTTP响应头。
根据您的实际情况,设定自定义HTTP响应头,详情请参见CDN如何通过HTTP头配置跨域资源共享(CORS)。
若跨域问题还是没有解决,请参见OSS跨域资源共享(CORS)出现的常见错误及解决方案进一步排查处理。
适用于
对象存储OSS
如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值