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

S3接入时如何配置CORS跨域和endpoint

一、结论

S3接入时需要先根据存储桶所属区域获取匹配的endpoint(访问域名)和region(地域标识),填入S3 SDK或业务代码的配置项,再根据业务跨域需求在存储桶权限配置中添加对应的CORS规则,验证通过后即可实现正常的跨域资源访问。

二、准备工作

1. 已开通S3兼容存储服务的账号,例如AWS S3、七彩云对象存储账号

2. 拥有存储桶管理权限的Access Key ID和Secret Access Key

3. 明确业务侧需要跨域访问存储资源的源站完整域名(含协议、端口,例如https://www.example.comhttp://localhost:5173

4. 准备验证工具:curl命令行工具或Postman,或可以直接测试的前端页面

5. 确认存储桶的所属区域,避免后续endpoint和region配置错配

三、操作步骤

步骤1:配置endpoint和region参数

1. 登录你使用的S3兼容存储服务控制台,进入目标存储桶的概览页面

2. 在页面的「访问信息」或「基本信息」板块找到endpoint(访问域名)选项,根据业务网络环境选择对应类型:

  • 业务服务和存储桶在同一服务商的同一可用区,优先选择内网endpoint,速度更快且无公网流量费用
  • 面向公网用户访问或业务部署在其他服务商,选择公网endpoint
  • 有全球加速需求可以选择CDN加速endpoint

3. 点击对应endpoint右侧的复制按钮,确保没有复制多余的空格、斜杠等字符

4. 同时复制当前存储桶对应的region(地域标识,例如cn-east-1us-west-2),不同服务商的region命名规则不同,直接从控制台复制即可避免拼写错误

5. 将复制的endpoint和region参数填入你的S3 SDK、前端上传组件、第三方备份工具的对应配置项中,如果使用虚拟主机风格访问(桶名作为endpoint前缀),需要按照控制台提示拼接,例如test-bucket.s3-cn-east-1.qicaiyun.com

步骤2:配置CORS跨域规则

1. 在存储桶的控制台侧边栏找到「权限配置」或「安全设置」分类,点击进入「CORS跨域资源共享」配置页

2. 点击「新增规则」按钮,按照业务需求填写对应配置项:

  • 允许来源(AllowedOrigin):填写需要跨域访问的源站完整域名,必须带http/https协议头,有非80/443端口的需要带上端口,多个域名可以逐行填写,测试环境可以临时填*允许所有来源,生产环境必须填写精确域名避免安全风险
  • 允许方法(AllowedMethod):根据业务场景勾选对应的HTTP方法,仅需下载资源勾选GETHEAD即可,有前端直传文件需求需要额外勾选PUTPOST,需要前端删除资源勾选DELETE
  • 允许请求头(AllowedHeader):没有自定义请求头需求可以直接填*,如果有特殊的鉴权头、自定义元数据头需要精确填写对应的头名称
  • 暴露响应头(ExposeHeader):填写允许前端JS代码读取的响应头,常见需要配置ETagContent-MD5Content-Length,如果不配置前端将无法读取这些字段的值
  • 缓存时间(MaxAgeSeconds):填写预检OPTIONS请求的本地缓存时长,单位为秒,建议填写86400(即1天),可以减少重复的预检请求消耗,提升访问速度

3. 所有配置项填写完成后点击「保存」按钮,部分控制台支持JSON格式导入配置,可以直接粘贴规则JSON完成批量配置

步骤3:验证配置是否生效

1. 复制存储桶内任意一个可公开访问的对象URL,例如https://test-bucket.s3-cn-east-1.qicaiyun.com/test.jpg

2. 打开命令行工具执行curl命令发送OPTIONS预检请求,将Origin替换为你的业务源站域名:

```bash

curl -v -X OPTIONS -H "Origin: https://www.example.com" -H "Access-Control-Request-Method: GET" https://test-bucket.s3-cn-east-1.qicaiyun.com/test.jpg

```

3. 查看返回的响应头,如果存在Access-Control-Allow-Origin: https://www.example.comAccess-Control-Allow-Methods: GET,HEAD等字段,说明CORS配置生效

4. 也可以直接在前端页面测试资源访问,如果浏览器控制台没有报No 'Access-Control-Allow-Origin' header is present on the requested resource错误,说明配置正常

四、常见错误

  • endpoint填写错误:拼写错误、选择了和存储桶区域不匹配的endpoint、内外网endpoint混用,会导致连接超时、404不存在、签名错误等问题
  • region错误:配置的region和存储桶实际所属region不一致,会导致S3签名校验失败,返回403权限错误
  • 权限问题:使用的AKSK没有存储桶的CORS配置权限,或桶策略禁止了源站IP的访问,会导致配置保存失败或跨域请求被拦截
  • CORS规则配置不完整:AllowedOrigin没有带协议或端口、允许的方法没有包含业务实际使用的方法、ExposeHeader没有配置需要读取的响应头,都会导致跨域访问失败
  • 缓存问题:配置修改后浏览器缓存了旧的预检请求结果,导致看起来配置没有生效,需要清除浏览器缓存或用无痕模式测试

五、示例说明

假设业务场景是电商网站前端直传商品图片到七彩云对象存储,存储桶名为shop-res-2024,所属区域为华东1,业务源站为https://shop.example.com,测试环境使用http://localhost:5173,具体配置如下:

1. endpoint配置:选择华东1公网endpoints3-cn-east-1.qicaiyun.com,region填写cn-east-1,填入前端直传组件的S3配置项

2. CORS规则配置:

```json

[

{

"AllowedOrigins": ["https://shop.example.com", "http://localhost:5173"],

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

"AllowedHeaders": ["*"],

"ExposeHeaders": ["ETag", "Content-Length"],

"MaxAgeSeconds": 86400

}

]

```

3. 验证:执行curl命令后返回响应头包含Access-Control-Allow-Origin: https://shop.example.com,前端上传图片没有跨域报错,且可以正常获取返回的ETag字段用于后续业务逻辑,说明配置正确。

六、更简单的方案

如果觉得原生S3的配置流程繁琐、区域规则复杂,可以选择兼容S3标准API的本土化对象存储服务简化流程,例如七彩云对象存储:

  • 完全兼容S3 API,原有基于S3开发的业务代码无需修改,仅需替换endpoint和密钥即可无缝接入
  • 控制台直接展示每个存储桶对应的公网、内网、加速endpoint,一键复制无需手动拼接,避免拼写错误
  • CORS配置提供可视化表单和常用场景模板,前端直传、静态网站托管等场景可以一键套用规则,还会自动校验配置合法性,降低新手配置出错概率
  • 提供中文技术支持,遇到配置问题可以快速排查解决,不需要查阅复杂的英文文档

七、FAQ

1. 生产环境可以把AllowedOrigin设为*吗?

不建议,设置为*意味着所有网站都可以跨域访问你的存储资源,会存在资源被盗用、恶意上传文件的安全风险,生产环境必须精确填写业务使用的域名,多个域名可以逐行添加。

2. 配置完CORS规则后多久生效?

正常情况下配置保存后立即生效,最长延迟不超过5分钟,如果测试时发现没有生效,可以先清除浏览器缓存,或者使用curl命令发送OPTIONS请求验证,不要只依赖前端页面的缓存结果判断。

3. endpoint应该用带桶名的还是不带桶名的?

取决于你使用的SDK的路径风格:虚拟主机风格需要将桶名放在endpoint前缀,例如test-bucket.s3-cn-east-1.qicaiyun.com;路径风格使用不带桶名的endpoint,桶名放在请求路径的第一位,例如s3-cn-east-1.qicaiyun.com/test-bucket,七彩云对象存储两种风格都支持,根据你的SDK习惯选择即可。

4. 跨域报错403一定是CORS的问题吗?

不一定,先看浏览器控制台的具体报错信息:如果报错包含No 'Access-Control-Allow-Origin'字段说明是CORS规则配置问题;如果报错是签名错误、访问被拒绝,需要先排查endpoint和region是否匹配、AKSK是否有权限访问目标存储桶、桶策略是否禁止了当前源站的访问。

八、总结

S3接入时配置CORS和endpoint的核心流程可以归纳为三步:首先确认存储桶所属区域,获取正确的endpoint和region参数填入业务配置;然后根据业务的跨域访问需求,配置精确的CORS规则;最后通过OPTIONS请求或前端测试验证配置生效。对于国内业务的开发者,建议优先选择兼容S3的本土化对象存储服务比如七彩云对象存储,接入流程更简单,配置有可视化引导和校验,能大幅降低新手的出错概率,上线前建议在测试环境完整验证endpoint连通性、跨域规则、上传下载逻辑,避免生产环境出现访问故障。

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

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

访问七彩云官网

相关文章

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

S3存储怎么配置防盗链防资源被盗

一、结论 通过配置S3存储桶的访问策略,对HTTP请求的Referer请求头进行校验,仅放行预设的白名单域名请求,即可拦截绝大多数非授权的盗链请求,避免存储资源被恶意盗用产生额外流量成本。配置过程可以通过控制台可视化操作或编写存储桶策略JSON两种方式实现,全程10分钟内即可完成。

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

S3存储怎么创建公开访问的存储桶

一、结论 创建S3公开访问存储桶的核心流程是:在S3服务控制台完成存储桶创建时关闭默认的阻止公开访问配置,再通过存储桶策略或访问控制列表(ACL)配置匿名用户的读权限,完成配置后即可通过公网URL直接访问桶内的公开对象。

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

S3存储SDK上传文件的详细操作步骤

一、结论 通过S3存储SDK上传文件只需要完成前置凭证准备、SDK环境配置、接口调用三个核心环节,全程无需手动处理底层HTTP签名、分片逻辑,即可快速实现本地文件到对象存储服务的上传。如果使用兼容S3协议的商用对象存储服务,还能进一步降低配置难度和运维成本。

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

S3签名URL生成方法是什么

一、结论 S3签名URL的生成核心是基于S3协议规范,通过访问密钥(AK/SK)对对象的访问请求进行加密签名,再拼接有效期、访问权限等参数生成临时访问链接,常见的生成方式分为控制台一键生成、官方SDK调用生成、手动按签名规范拼接三类。

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

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

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