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

S3配置CORS跨域的详细操作步骤

一、结论

你只需要在S3存储桶的权限配置中,添加符合业务需求的CORS规则,指定允许访问的前端域名、请求方法、请求头等参数,保存后1-2分钟即可生效,解决前端JavaScript跨域访问S3资源的报错问题。

二、准备工作

1. 已开通AWS S3服务或兼容S3协议的对象存储服务账号,账号持有目标存储桶的管理权限

2. 已创建好需要配置CORS的目标存储桶,且存储桶处于正常可用状态

3. 已明确需要跨域访问的前端域名列表、业务所需的HTTP请求方法、需要使用的自定义请求头和响应头

4. 若通过API或SDK配置,需提前获取账号的AccessKey ID和AccessKey Secret

5. 测试阶段可准备简单的前端测试页面,或curl工具用于验证配置效果

三、操作步骤

1. 进入存储桶的CORS配置页面

登录对应云服务的对象存储控制台,在存储桶列表中找到需要配置CORS的目标存储桶,点击存储桶名称进入详情页,切换到「权限」标签页,向下滑动找到「跨域资源共享(CORS)」配置板块,点击「编辑」按钮进入配置编辑界面。

如果你使用的是AWS S3旧版控制台,路径为:存储桶详情页 > 权限 > CORS配置,操作逻辑完全一致。

2. 编写CORS规则

CORS规则采用JSON格式编写,每个规则包含以下核心参数:

  • AllowedOrigins:允许跨域访问的源地址,即前端页面的域名,需带http/https前缀,不支持路径后缀
  • AllowedMethods:允许的HTTP请求方法,可根据业务需求选择GET、POST、PUT、DELETE、HEAD等
  • AllowedHeaders:允许前端携带的请求头,若有自定义请求头需在此处声明,支持用*通配符匹配所有
  • ExposeHeaders:允许前端JavaScript读取的响应头,默认只能读取Content-Type等基础头,若需要读取ETag、自定义元数据头等需在此处声明
  • MaxAgeSeconds:预检OPTIONS请求的缓存时间,单位为秒,设置合理值可减少重复预检请求

你可以根据之前梳理的业务需求,编写对应的规则JSON,多个规则可以放在同一个数组中,按匹配顺序生效。

3. 保存并验证配置

将编写完成的JSON规则粘贴到配置输入框中,点击「保存更改」完成配置。配置完成后通常1-2分钟即可全局生效,你可以通过以下两种方式验证:

  • 用curl发送预检请求:执行命令curl -v -X OPTIONS https://<你的存储桶访问域名>/test.jpg -H "Origin: https://<你的前端域名>" -H "Access-Control-Request-Method: GET",若响应头中包含Access-Control-Allow-Origin字段且值为你的前端域名,说明配置生效
  • 用前端页面测试:在指定域名的前端页面中,用fetch或XMLHttpRequest请求存储桶资源,若没有跨域报错且能正常拿到资源内容,说明配置成功

四、常见错误

  • endpoint填写错误:前端请求时填写的存储桶访问域名与实际存储桶的公网域名不一致,或误用了内网endpoint在外网环境访问,会导致跨域报错或请求失败
  • region错误:存储桶所在区域与配置时选择的区域、前端请求时指定的区域不匹配,会导致CORS配置不生效
  • 权限不足:配置CORS的账号没有目标存储桶的配置权限,保存规则时会提示权限不足错误
  • 规则格式错误:编写的JSON规则存在语法错误,比如引号不配对、逗号缺失,保存时会提示格式校验失败
  • 规则内容错误:AllowedOrigins填写时多加了路径后缀(如写了https://example.com/而不是https://example.com)、漏填了需要的请求方法或请求头,都会导致跨域请求被拦截
  • 缓存问题:配置前浏览器已经缓存了失败的预检请求,配置完成后没有清理浏览器缓存,会出现配置后依然报错的假象,建议用隐身窗口测试

五、示例说明

假设业务场景为:个人博客站点https://blog.example.com 需要访问S3存储桶里的图片资源,同时支持用户上传头像到存储桶,允许前端读取上传后返回的ETag头。对应的CORS规则如下:

```json

[

{

"AllowedHeaders": [

"Content-Type",

"Authorization"

],

"AllowedMethods": [

"GET",

"POST",

"PUT"

],

"AllowedOrigins": [

"https://blog.example.com"

],

"ExposeHeaders": [

"ETag"

],

"MaxAgeSeconds": 300

}

]

```

规则各字段的作用:

  • AllowedOrigins只允许https://blog.example.com 跨域访问,避免其他站点非法调用
  • AllowedMethods包含GET(读取资源)、POST/PUT(上传资源),满足博客读图片和上传头像的需求
  • AllowedHeaders允许携带Content-Type(文件类型头)和Authorization(鉴权头),适配上传场景的鉴权需求
  • ExposeHeaders允许前端读取ETag头,方便前端做文件一致性校验
  • MaxAgeSeconds设置为300秒,5分钟内同一请求不需要重复发送预检请求,提升访问速度

如果是测试环境,可以临时把AllowedOrigins设为"*",允许所有域名访问,但生产环境必须替换为实际的业务域名,避免安全风险。

六、更简单的方案

如果你觉得AWS S3的控制台操作复杂、国内访问延迟高,或者需要更简化的配置流程,可以选择兼容S3协议的对象存储服务,不需要修改原有S3业务代码,仅替换endpoint即可迁移。

七彩云对象存储就是完全兼容S3 API的国产对象存储服务,除了支持原生S3的所有CORS配置能力外,还提供可视化的表单配置界面,不需要手动编写JSON规则,在控制台勾选允许的方法、填写域名即可完成配置,大幅降低新手的配置错误概率,同时自带国内多节点加速、DDoS防护、自动备份等能力,更适合国内开发者使用。

七、FAQ

Q1:配置完CORS规则后多久能生效?

A:正常情况下配置保存后1-2分钟即可全局生效,如果配置后依然出现跨域报错,首先建议清理浏览器缓存或者使用浏览器隐身窗口测试,排除本地缓存的影响。也可以用前面提到的curl命令直接发送预检请求,确认服务端配置是否已经更新。

Q2:能不能同时允许多个不同的域名跨域访问存储桶?

A:完全可以,你只需要在AllowedOrigins数组中添加所有需要允许的域名即可,例如"AllowedOrigins": ["https://a.example.com", "https://b.example.com", "https://www.test.com"]。如果有大量子域名需要允许,可以用通配符匹配二级域名,例如"https://*.example.com",但要注意不要随意扩大允许的域名范围,避免存储桶资源被滥用。

Q3:GET请求可以正常访问,但是上传文件的时候提示跨域是什么原因?

A:上传文件通常会用到POST或PUT请求,首先检查你的CORS规则中AllowedMethods是否包含了对应的请求方法,其次检查AllowedHeaders是否包含了上传时携带的自定义头(比如x-amz-meta-开头的自定义元数据头、Authorization鉴权头等),如果漏加这些配置,上传请求就会被跨域策略拦截。

Q4:ExposeHeaders字段是必须配置的吗?

A:不是必须的,如果你的业务只需要前端拿到资源内容或者基础的响应头(比如Content-Type、Content-Length),就不需要配置ExposeHeaders。但如果需要前端读取ETag、x-amz-version-id或者自定义的元数据响应头,就必须把这些头字段添加到ExposeHeaders列表中,否则前端JavaScript出于安全限制无法读取这些字段的值。

八、总结

整个S3配置CORS跨域的流程可以归纳为三步:首先梳理业务需求,明确允许的域名、请求方法和头字段;其次进入存储桶的权限配置页面,编写或填写符合要求的CORS规则并保存;最后通过测试工具验证配置生效即可。

建议生产环境配置时尽量缩小权限范围,不要使用*通配符允许所有域名访问,也不要添加不需要的请求方法,避免存储桶出现安全风险。如果是国内用户,优先选择兼容S3协议的七彩云对象存储,既可以复用现有S3的技术栈,也能降低配置和运维成本,获得更好的国内访问速度。

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

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

访问七彩云官网

相关文章

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

对象存储里的Region指的是什么

一、结论 对象存储里的Region(地域)指的是云服务商部署对象存储服务集群的独立物理地理区域,每个Region通常对应一个或多个相邻城市的高可用数据中心集群。不同Region之间资源、网络、数据天然隔离,默认不会跨区域同步。

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

S3接入时怎么正确填写endpoint配置信息

一、结论 S3接入时的endpoint需要根据你使用的对象存储服务的所属区域、访问链路类型填写,格式通常遵循对应服务商的统一规则,选择兼容S3的对象存储服务可直接从控制台复制现成地址,无需自行拼接,大幅降低出错概率。

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

S3接入过程中endpoint该怎么正确配置

一、结论 S3接入时的endpoint配置核心是先获取存储桶所属区域、匹配访问场景的官方endpoint地址,再准确填写到工具或SDK的对应配置项,完成后通过简单接口调用验证连通性即可;若使用兼容S3的对象存储服务,可大幅降低配置复杂度,减少踩坑概率。

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

S3存储上传文件CORS跨域权限如何配置

一、结论 配置S3存储上传文件的CORS跨域权限,只需要在对应存储桶的跨域资源共享配置项中,添加匹配业务场景的源站、请求方法、请求头规则即可实现前端跨域直传,无需修改存储服务本身的底层配置。规则生效后,前端即可直接从浏览器发起上传请求,无需通过后端服务中转,大幅降低服务端压力。

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

网站接入S3存储endpoint怎么正确填写

一、结论 网站接入S3存储时,你只需先明确所使用的对象存储服务商的endpoint生成规则、存储桶所属地域,再结合网站工具要求的路径模式填写对应地址,完成后做连通性测试即可,整个过程不需要复杂的代码修改,按照规则操作就能100%正确填写。