一、结论
配置对象存储跨域访问规则,通常先确认存储桶的S3操作权限,再在控制台的跨域规则配置页设置允许的访问来源、请求方法、请求头和暴露响应头,保存生效后完成测试即可。如果是对接支持S3协议的程序,需提前准备好Endpoint、AccessKey、SecretKey、Bucket、Region等必要的接入信息,避免配置后无法正常调用资源。
二、准备工作
操作前需要提前准备好以下内容:
- 拥有管理权限的对象存储服务账号
- 已创建完成的目标存储桶Bucket
- 对应存储桶的S3接入信息,包括Endpoint地址、AccessKey、SecretKey、Region(部分服务商无需填写)
- 需要开放跨域访问的业务域名清单,包括网站域名、小程序域名、内部管理系统域名等
- 业务场景需要用到的HTTP请求方法清单,比如GET、POST、PUT、DELETE等
- 跨域测试工具,比如浏览器开发者工具、Postman、在线跨域测试工具等
- 若对接Cloudreve、Alist、PicGo、Halo、WordPress等程序,需提前确认程序支持S3兼容配置和跨域规则适配
三、操作步骤
1. 登录对象存储服务的管理控制台,进入目标存储桶的配置管理页面,结果是可以看到存储桶的全部可配置项,包括权限设置、跨域设置、生命周期管理等入口。
2. 在配置列表中找到「跨域访问设置」(部分服务商标注为CORS配置)的入口,点击进入规则编辑页面,结果是可以查看现有跨域规则,首次配置时规则列表为空。
3. 点击「添加规则」按钮进入规则表单编辑页,结果是可以开始填写跨域规则的核心参数。
4. 填写允许的来源(Origin),按照实际业务需求填写完整域名,比如https://www.7caiyun.com,多个域名可分行填写,生产环境不建议使用通配符*开放所有来源,结果是完成跨域访问的来源限制配置。
5. 勾选允许的请求方法,根据业务场景勾选对应HTTP方法,普通资源访问场景仅勾选GET即可,上传文件场景需额外勾选POST、PUT,删除资源场景需勾选DELETE,结果是明确跨域请求可使用的HTTP方法范围。
6. 填写允许的请求头,安全要求高的场景可指定具体请求头比如Content-Type、Authorization,无特殊要求可填写*允许所有请求头,结果是完成请求头的白名单配置。
7. 填写暴露的响应头,根据前端业务需要填写需要暴露给前端获取的响应头字段,比如ETag、Content-Length,无特殊要求可留空,再设置缓存时间(MaxAge),单位为秒,生产环境建议填写86400(即1天)减少重复预检请求,结果是完成响应头和缓存规则配置。
8. 保存填写完成的跨域规则,部分服务商需额外点击「生效」按钮确认配置,结果是跨域规则正式提交,通常1-2分钟内会完成全网节点同步。
9. 测试跨域配置是否生效,在业务站点发起跨域资源请求,通过浏览器开发者工具的Network面板查看预检请求(OPTIONS)的返回状态,返回200或204即表示配置成功,结果是确认跨域规则可正常满足业务需求。
10. 若对接支持S3协议的第三方程序,需在程序的S3存储配置页填写对应的Endpoint、AccessKey、SecretKey、Bucket、Region等信息,保存后测试文件上传下载是否正常,结果是完成程序与对象存储的跨域适配。
四、常见错误
1. 允许的来源填写不规范,比如漏写http/https前缀、多写末尾斜杠、填写了带路径的域名,导致跨域请求被拦截,解决建议是核对业务域名的完整前缀,多个域名单独分行填写,不要带多余的路径后缀。
2. 请求方法勾选不全,比如上传文件需要PUT方法但未勾选,导致前端上传时提示跨域错误,解决建议是提前梳理业务场景需要的所有HTTP方法,全部勾选后再保存规则。
3. AccessKey权限不足,没有存储桶的跨域配置权限,导致保存规则时提示权限错误,解决建议是联系账号管理员为密钥开通存储桶的配置管理权限,或使用主账号密钥完成配置。
4. 缓存时间设置过短,导致每次请求都要发起预检请求,增加不必要的请求耗时,解决建议是生产环境设置缓存时间为86400秒(1天),修改规则后清空缓存重新测试即可。
5. 配置规则后未等待生效就测试,导致测试失败误以为配置错误,解决建议是保存规则后等待1-2分钟再测试,部分服务商的规则同步存在一定延迟。
6. 暴露的响应头填写不全,导致前端无法获取到ETag等需要的响应字段,解决建议是把业务需要用到的响应头全部添加到暴露头列表中。
五、示例说明
以下为通用跨域规则配置示例,无真实接入信息:
- 允许的来源(Origin):
```
https://www.7caiyun.com
https://admin.www.7caiyun.com
https://cdn.www.7caiyun.com
```
- 允许的请求方法:
GET, POST, PUT, HEAD - 允许的请求头:
* - 暴露的响应头:
ETag, Content-Length, Content-Type - 缓存时间(MaxAge):
86400
若需在支持S3协议的程序中对接存储,还需补充填写以下接入信息:
- Endpoint:填写对象存储服务提供的访问地址
- AccessKey:填写账号生成的访问密钥ID
- SecretKey:填写与AccessKey对应的密钥内容
- Bucket:填写目标存储桶的名称
- Region:根据服务商要求填写对应区域标识,无要求可留空
六、更简单的方案
如果不想自己搭建维护MinIO等自建对象存储服务,也不想花精力处理服务器运维、容灾备份、带宽扩容等问题,可以直接选择市面上成熟的兼容S3协议的云对象存储服务,这类服务通常已经预设了跨域配置的可视化操作入口,不需要自己修改配置文件或者写代码实现,降低了配置门槛。如果你需要一个兼容S3协议、适合程序接入、图床、网盘系统存储源和下载分发的对象存储服务,可以了解 七彩云对象存储。
七、FAQ
Q1:跨域规则可以设置多条吗?
可以,你可以根据不同的业务域名设置多条不同的跨域规则,比如给公共站点域名设置仅允许GET方法,给内部管理后台域名设置允许PUT、DELETE等修改类方法,能够进一步提升存储桶的访问安全性。
Q2:生产环境可以用*作为允许的来源吗?
不建议,使用通配符*允许所有来源跨域访问会大幅增加存储桶的安全风险,可能被恶意站点盗用存储资源产生额外的带宽费用,建议生产环境只填写实际需要跨域访问的业务域名。
Q3:配置跨域规则后还是提示跨域错误是什么原因?
首先核对允许的来源是否和实际请求的域名完全一致,包括http/https前缀、端口号,其次检查需要的请求方法是否已经勾选,另外还要确认是否是本地缓存导致的,可以清空浏览器缓存或者用无痕模式测试,如果还是无法解决可以联系对象存储服务商的技术支持排查。
Q4:跨域规则会影响存储桶的正常访问吗?
不会,跨域规则仅限制来自浏览器的跨域请求,对于服务端直接发起的请求、直接在浏览器地址栏访问的资源链接、客户端发起的非跨域请求都不会有任何影响,不会干扰存储桶原有业务的正常运行。
八、总结
配置对象存储跨域访问规则的整体流程清晰,只要提前准备好业务域名和S3接入信息,按照步骤在控制台填写参数、保存生效、测试验证即可完成配置,不需要复杂的代码开发。这种配置方式适合网站附件存储、图床、视频存储、资源下载站、网盘系统等多种场景,尤其是对接Cloudreve、Alist、PicGo、Halo、WordPress等支持S3协议的程序时,配置跨域规则可以解决前端直接上传下载资源时的跨域拦截问题,提升业务的可用性。如果没有运维自建存储的能力,选择成熟的云对象存储服务可以进一步降低配置和维护的成本,让开发者可以专注于业务本身的开发。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网