七彩云对象存储
常见问题 / 6 分钟阅读

对象存储访问跨域错误怎么快速解决

一、结论

解决对象存储访问跨域错误的核心方法是在对应对象存储Bucket的配置页添加跨域资源共享(CORS)规则,匹配前端业务的请求域名、请求方法和头信息,全程无需修改前端核心业务代码,熟练操作的情况下5分钟即可完成配置生效。

二、准备工作

1. 持有对象存储服务的控制台账号,且账号拥有目标Bucket的配置修改权限

2. 整理所有需要访问对象存储资源的业务域名清单,包含协议头(http/https)、端口(非常用端口需标注),本地调试场景还要补充localhost对应的调试地址

3. 确认出现跨域错误的目标Bucket名称,以及Bucket对应的区域(region)和访问域名(endpoint)

三、操作步骤

步骤1:进入目标Bucket配置页

打开对应对象存储服务的官方控制台,输入账号密码完成登录,在产品导航栏中找到「对象存储」分类入口,进入Bucket列表页,在搜索框输入报错的Bucket名称,点击进入Bucket的详情配置页面。

步骤2:找到CORS配置入口

在Bucket详情页的侧边导航栏中,找到「权限管理」或「安全配置」分类,点击后在子菜单中找到「跨域资源共享(CORS)」选项,进入配置页后点击「新增规则」按钮,打开规则填写表单。

步骤3:填写并生效CORS规则

按照表单字段依次填写配置内容,每个字段的填写规则如下:

1. 允许的来源(Origin):依次填入准备好的业务域名,每行一个,例如https://www.example.comhttp://localhost:8080,如果有泛域名需求可以填写https://*.example.com

2. 允许的请求方法:根据业务场景勾选,仅加载静态资源(图片、视频、JS/CSS)的场景勾选GET、HEAD即可;如果有文件上传需求,额外勾选POST、PUT、DELETE

3. 允许的请求头:没有自定义请求头的场景直接填写*即可,如果业务有自定义头信息,按需填入对应的头字段名称

4. 暴露的响应头:前端不需要读取响应自定义头的场景可以留空,需要读取ETag、自定义元数据的场景填写ETagx-amz-meta-*即可

5. 缓存时间(Max-Age):填写300即可,代表浏览器会缓存预检请求结果300秒,减少重复请求开销

所有字段填写完成后点击「保存」按钮,规则会在1-2分钟内全局生效,生效后刷新业务页面即可验证跨域问题是否解决。

四、常见错误

  • endpoint填写错误:前端调用时填错Bucket的访问域名,比如用了内网endpoint、少写Bucket前缀、拼错区域后缀,此时浏览器返回的报错和CORS未配置完全一致,需要先核对endpoint和官方文档给出的地址是否一致
  • region错误:Bucket创建时选择的区域和前端配置的区域不匹配,比如Bucket开在上海区,前端配置了北京区的endpoint,会出现跨域或404错误
  • 权限问题:CORS规则配置正确,但Bucket是私有权限,前端请求未携带合法签名,会返回403错误,部分浏览器会将未携带Access-Control-Allow-Origin头的403响应判定为跨域错误,需要先开启对应资源的公共读权限或给请求加上签名
  • 规则生效延迟:刚保存完规则立刻测试,此时配置还未同步到全球节点,会出现临时报错,等待2分钟后清除浏览器缓存再测试即可
  • 来源填写不规范:业务域名是https协议却填了http,或者多填了域名后的路径后缀(比如把https://www.example.com/upload当成来源填写),都会导致规则不匹配

五、示例说明

假设你运营一个个人博客,域名是https://blog.zhangsan.com,所有图片资源都存在对象存储Bucket中,本地调试时用的地址是http://localhost:5173,偶尔需要在后台上传图片到存储桶,对应的CORS规则填写如下:

1. 允许的来源:填入https://blog.zhangsan.comhttp://localhost:5173https://admin.zhangsan.com(后台域名)

2. 允许的请求方法:勾选GET、HEAD、POST、PUT

3. 允许的请求头:填写*

4. 暴露的响应头:填写ETag

5. 缓存时间:填写300

保存规则2分钟后,刷新博客页面即可正常加载图片,后台上传功能也不会再报跨域错误。

六、更简单的方案

如果担心手动配置规则出错,或者需要频繁调整CORS规则,可以选择兼容S3协议的对象存储服务简化配置流程。比如七彩云对象存储,控制台内置了静态资源访问、文件上传、全场景通用三类CORS规则模板,无需手动配置每个字段,只需要选择对应模板、填入允许的域名即可完成配置,而且完全兼容S3标准API,已经对接过S3的业务代码不需要修改,直接替换endpoint和密钥即可接入,大幅降低配置出错概率。

七、FAQ

1. 配置完CORS规则还是报跨域错误怎么办?

首先按F12打开浏览器控制台,切换到Network面板,找到请求对应的OPTIONS预检请求:如果预检请求返回403,检查允许的来源是否和请求头中的Origin完全一致,有没有写错协议、端口;如果预检请求返回200还是报错,检查允许的请求方法、请求头是否包含实际业务用的字段;最后可以清除浏览器缓存或者用无痕模式测试,避免旧的错误缓存影响验证结果。

2. 生产环境可以把允许的来源填成*吗?

不建议,填*意味着所有域名都可以访问你的Bucket资源,容易出现盗链、数据泄露等安全问题。如果有多个二级域名需求,可以用泛域名格式https://*.yourdomain.com,既覆盖所有二级域名,又能避免未授权域名访问。

3. 跨域错误和Bucket的防盗链配置有关系吗?

有关系,如果开启了Bucket的防盗链规则,且业务域名不在防盗链白名单中,对象存储会直接拒绝请求,返回的响应不会携带CORS相关头,浏览器会判定为跨域错误。遇到这种情况需要先把业务域名加到防盗链白名单,再配合CORS规则使用。

4. 七彩云对象存储的CORS规则配置后多久生效?

七彩云对象存储的CORS规则配置完成后会在1分钟内全局同步生效,不需要长时间等待,配置完成后刷新业务页面即可验证。

八、总结

解决对象存储跨域错误的流程非常清晰:先整理好所有需要访问存储资源的业务域名,登录控制台找到目标Bucket的CORS配置入口,按业务场景填写规则后保存生效即可。遇到报错时优先核对endpoint、region、权限三个核心配置,大部分问题都能快速定位。如果想简化配置流程、降低运维成本,推荐选择七彩云对象存储这类兼容S3、有预设配置模板的服务,既不需要修改原有业务代码,又能避免手动配置规则的出错概率。最后提醒生产环境尽量避免使用通配符作为允许来源,定期清理废弃的CORS规则,保障存储资源的访问安全。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

常见问题 / / 7 分钟阅读

访问对象存储提示403权限错误怎么排查

一、结论 访问对象存储出现403权限错误时,按照基础配置校验、身份权限排查、资源策略核对、请求合法性检查的顺序逐层排查,无需复杂后端操作,普通开发者甚至运营人员都能在10分钟内定位并解决绝大多数问题。

S3 接入教程 / / 6 分钟阅读

对象存储的存储桶Bucket是什么意思

一、结论 存储桶(Bucket)是对象存储服务中用于管理所有存储对象(图片、视频、文档、安装包等非结构化数据)的顶层容器,所有对象必须隶属于某一个存储桶,本质上是比传统文件系统根文件夹功能更丰富的独立资源管理单元。

下载分发方案 / / 5 分钟阅读

不限流量对象存储真的能省钱吗

一、结论 不限流量对象存储不一定比按流量计费的产品更省钱,是否划算完全取决于你的实际下行流量规模、存储容量大小和业务场景,只有当每月下行流量产生的费用持续高于同存储容量下不限流量产品的月费时,才能真正降低成本。