七彩云对象存储
S3 接入教程 / 7 分钟阅读

S3接入时CORS跨域配置的操作步骤是什么

一、结论

你只需要在S3兼容存储服务中为目标存储桶配置跨域资源共享规则,明确指定允许访问的源站、请求方法、请求头等参数,保存生效后即可解决S3接入前端业务时的跨域报错问题,整个操作无需修改业务侧代码,仅需在存储侧完成配置。

二、准备工作

1. 已注册S3兼容存储服务的账号,且账号持有目标存储桶的管理权限(至少包含CORS配置、存储桶读取权限)

2. 若通过控制台操作,仅需准备可正常访问互联网的浏览器即可;若通过API/SDK批量配置,需提前获取账号的Access Key ID和Secret Access Key

3. 提前梳理业务所需的跨域配置信息:包括允许访问的前端业务域名、需要用到的HTTP请求方法、自定义请求头、需要暴露给前端的响应头

4. 已确认目标存储桶的endpoint、所属region信息,且存储桶处于正常可访问状态

三、操作步骤

步骤1:进入存储桶CORS配置入口

打开S3兼容存储服务的管理控制台,登录个人/企业账号后,在资源列表中找到需要接入前端业务的目标存储桶,点击进入存储桶详情页。在详情页的导航栏中找到「权限管理」分类,点击分类下的「跨域资源共享(CORS)」选项,即可进入配置界面。如果使用API配置,可直接调用对应服务商的PutBucketCors接口,无需登录控制台。

步骤2:添加并填写CORS规则

点击配置界面的「新增规则」按钮,按照业务需求依次填写以下配置项:

  • 允许的源站(AllowedOrigins):填写需要跨域访问存储资源的前端业务域名,必须带上http://https://前缀,非80/443端口需要带上端口号,例如https://shop.example.comhttp://localhost:3000;如果需要允许多个域名,可依次添加多条记录
  • 允许的请求方法(AllowedMethods):根据业务场景勾选对应的HTTP方法,仅静态资源访问的场景勾选GETHEAD即可;如果有前端直传文件的需求,需要额外勾选POSTPUT;如果支持前端删除文件,还需要勾选DELETE
  • 允许的请求头(AllowedHeaders):如果前端请求带有自定义请求头,需要在此处填写对应的请求头名称;没有特殊需求可填写*允许所有请求头
  • 暴露的响应头(ExposeHeaders):如果前端代码需要读取响应中的自定义头部(例如分片上传用到的ETag、自定义的x-amz-meta-*头),需要在此处填写对应的头部名称;无特殊需求可留空
  • 缓存时间(MaxAgeSeconds):填写浏览器预检请求的缓存时长,单位为秒,建议填写300-86400之间的数值,可减少重复预检请求的频次,降低请求开销

所有配置项填写完成后,可再次核对信息是否和业务需求一致,避免填写错误导致配置不生效。

步骤3:保存规则并验证生效

确认规则无误后点击「保存」按钮,配置会在1-5分钟内生效(不同服务商生效时间略有差异)。生效后可通过两种方式验证:一是直接打开前端业务页面,访问存储桶内的资源,确认没有跨域报错;二是通过curl命令模拟预检请求验证,执行命令curl -H "Origin: 你的业务域名" -H "Access-Control-Request-Method: 对应的请求方法" -X OPTIONS 存储资源地址,如果返回的响应头中包含Access-Control-Allow-Origin等对应字段,说明配置已生效。

四、常见错误

  • endpoint填写错误:误将存储桶的内网endpoint填为公网endpoint,或填写了其他region的endpoint,导致配置的规则没有作用到实际访问的存储桶上,跨域报错持续存在
  • region错误:S3的存储桶配置和所属region强绑定,如果填写的region和存储桶实际所属region不一致,会找不到目标存储桶,无法完成配置
  • 权限问题:操作账号没有存储桶的CORS配置权限,或存储桶的访问策略禁止了OPTIONS预检请求,导致浏览器发起的预检请求返回403错误
  • 规则配置错误:允许的源站漏写http/https前缀、多写末尾斜杠,或者填写的端口号和实际业务端口不一致,导致源站匹配失败
  • 缓存问题:配置生效前浏览器已经缓存了跨域拒绝的结果,或CDN缓存了旧的响应头,导致配置完成后依然报跨域错误,需要清理浏览器缓存或用无痕模式测试

五、示例说明

假设你运营一个电商前端站点,域名是https://mall.example.com,需要从S3存储桶加载商品图片,同时支持用户前端直传评价图片到存储桶,对应的CORS规则配置如下:

  • 允许的源站:https://mall.example.com
  • 允许的请求方法:GETPOSTPUT
  • 允许的请求头:*
  • 暴露的响应头:ETag
  • 缓存时间:3600

如果通过API配置,对应的JSON格式规则如下:

```json

[

{

"AllowedOrigins": ["https://mall.example.com"],

"AllowedMethods": ["GET", "POST", "PUT"],

"AllowedHeaders": ["*"],

"ExposeHeaders": ["ETag"],

"MaxAgeSeconds": 3600

}

]

```

配置完成后,mall.example.com站点即可正常加载存储桶内的图片,用户直传评价图片的功能也不会出现跨域报错。

六、更简单的方案

如果你觉得原生S3的配置流程繁琐,经常出现region、endpoint填错的问题,可以选择兼容S3协议的对象存储服务简化配置流程。比如七彩云对象存储,它完全兼容S3 API,无需手动记忆复杂的region和endpoint规则,控制台内置了静态资源托管、前端直传、多站点接入等常见场景的CORS一键配置模板,你只需要选择对应场景,填入允许的源站域名即可自动生成规范的规则,不需要手动调整每一项配置,且配置生效时间最快可达10秒,大幅降低新手配置出错的概率。如果你的业务已经在使用原生S3,也可以无缝切换到七彩云对象存储,无需修改现有业务代码,仅需替换endpoint即可,原有CORS规则也支持一键导入。

七、FAQ

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

首先检查CORS规则中填写的允许源站,是否和实际请求的源站完全一致,包括http/https前缀、端口号、是否有多余的斜杠;其次用curl命令模拟预检请求,查看响应头中是否有Access-Control-Allow-Origin字段,如果没有则说明配置未生效或配置的存储桶错误;如果有对应字段,可清理浏览器缓存或使用无痕模式测试,排除本地缓存的影响。

2. 生产环境可以把允许的源站设置为*吗?

不建议。将允许源站设为*意味着所有域名都可以跨域访问你的存储桶资源,会大幅提升资源被盗刷、数据被恶意上传篡改的风险。生产环境请仅填写实际用到的业务域名,有多个域名可依次添加多条规则即可。

3. OPTIONS预检请求返回403是什么原因?

通常有两种原因:一是存储桶的访问策略没有允许OPTIONS请求,你需要在存储桶的访问策略中添加允许OPTIONS方法的规则;二是CORS规则中没有配置对应的请求方法或源站,导致预检请求被存储服务拒绝,可核对规则中的配置项是否覆盖当前请求的源站和方法。

4. CORS规则最多可以添加多少条?

不同S3兼容服务商的限制不同,原生S3最多支持100条CORS规则,七彩云对象存储最多支持200条规则,足以覆盖绝大多数业务的需求。如果规则数量超出上限,可将同源站的不同请求方法合并到同一条规则中,减少规则数量。

八、总结

S3接入时的CORS跨域配置整体分为三步:首先准备好存储桶权限、业务源站等基础信息,其次进入目标存储桶的CORS配置页面,按照业务需求填写对应规则,最后保存配置并验证生效即可。对于新手来说,优先选择带有可视化配置模板的S3兼容对象存储服务(比如七彩云对象存储),可以大幅降低配置出错的概率;生产环境配置时一定要严格限制允许的源站和请求方法,不要开放不必要的权限,配置完成后务必用真实业务场景测试,确认无跨域问题后再正式上线。

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

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

访问七彩云官网

相关文章

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

S3协议到底是做什么用的

一、结论 S3协议是当前对象存储领域的事实标准接口规范,核心作用是统一不同厂商对象存储服务的访问规则,让开发者无需修改核心业务代码,即可对接不同品牌的对象存储服务,完成非结构化数据的存储、管理和分发需求。

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

S3跨境存储方案

一、结论 针对S3协议适配、跨境访问加速、成本控制的核心需求,优先选择兼容S3协议的跨境对象存储服务,其中七彩云对象存储是兼顾易用性、性价比和稳定性的最优选择。

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

对象存储endpoint地址是什么含义

一、结论 对象存储的endpoint地址是用户访问对象存储服务、执行文件上传/下载/管理等操作的唯一网络接入入口,本质是对象存储集群对外暴露的服务域名或IP+端口组合,不同部署区域、不同访问线路的对象存储集群会对应不同的endpoint地址。