七彩云对象存储
视频存储方案 / 6 分钟阅读

视频存储下载分发场景S3接入如何配置CORS跨域

一、结论

在视频存储、下载、分发场景下,只需在S3兼容对象存储的对应存储桶中配置符合业务需求的CORS跨域规则,明确允许的请求源、请求方法、请求头与可暴露响应头,保存生效后即可解决前端播放器、下载页面跨域调用视频资源的报错问题。

二、准备工作

1. 已开通S3兼容对象存储服务账号,可选择原生AWS S3或国内的七彩云对象存储等服务;

2. 拥有目标存储桶的管理员操作权限,能够修改存储桶的权限配置;

3. 提前梳理清楚允许跨域访问的业务域名清单,包括PC端官网、H5端站点、内部管理系统等需要调用视频资源的域名;

4. 待配置的存储桶已上传测试视频资源,且已开启对应资源的访问权限(公网访问或签名访问均可);

5. 若通过API方式配置,需提前获取账号的AccessKey ID和AccessKey Secret,新手推荐直接通过控制台可视化操作,无需额外准备密钥。

三、操作步骤

步骤1:进入目标存储桶配置页

登录所用对象存储服务的控制台,在对象存储服务的桶列表中,找到用于存储、分发视频资源的目标存储桶,点击桶名称进入存储桶的详情配置页面。如果使用七彩云对象存储,可直接在左侧菜单栏点击「对象存储」,在桶列表中快速筛选定位目标桶。

步骤2:找到CORS配置入口

在存储桶详情页的顶部导航栏中,选择「权限配置」类选项,找到「跨域访问(CORS)」的配置入口。原生AWS S3的入口在「权限」标签页的下拉菜单中,七彩云对象存储的CORS配置入口直接展示在权限配置的一级菜单中,无需翻找多层子菜单。

步骤3:新增CORS规则

点击「添加规则」按钮,按照业务需求填写每个配置项:

1. 允许的源(AllowedOrigins):一行填写一个允许跨域的域名,必须带http/https前缀,不要加末尾的斜杠,例如https://www.your-domain.com,测试阶段可临时填写*匹配所有域名,生产环境必须填写实际业务域名;

2. 允许的方法(AllowedMethods):视频存储下载分发场景只需勾选GETHEAD即可,如果业务同时支持前端直接上传视频到存储桶,可额外勾选PUTPOSTDELETE

3. 允许的请求头(AllowedHeaders):直接填写*即可,适配所有常规请求头,若有自定义元数据需求可单独添加x-amz-meta-*等规则;

4. 暴露的响应头(ExposeHeaders):这是视频场景的必填配置项,必须添加Content-LengthContent-RangeETag三个字段,否则播放器无法识别视频长度、无法支持拖拽进度条、断点续传等功能;

5. 缓存时间(MaxAgeSeconds):填写86400(单位为秒,对应1天),减少浏览器重复发送预检请求的频率,提升访问速度。

步骤4:保存并验证配置

所有配置项填写完成后点击「保存」,配置会在1分钟内生效。可打开浏览器的开发者工具,进入业务站点播放或下载存储桶中的视频,查看网络请求中没有CORS ERROR报错即代表配置成功。

四、常见错误

  • endpoint填写错误:将存储桶的访问域名当成API调用的endpoint,或填错对应区域的endpoint地址,例如七彩云对象存储华东区的endpoint为oss-cn-east.qicaiyun.com,填错会导致请求无法到达存储服务,误以为是跨域配置失效;
  • region错误:存储桶创建在华南区域,但配置时选择了华北区域,无法定位到目标存储桶,配置的CORS规则自然不会生效;
  • 权限问题:存储桶本身未开启公网访问权限,或访问密钥没有对应资源的读权限,返回403错误时容易被误认为是跨域问题;
  • 暴露头配置缺失:仅配置了允许的源和方法,未添加Content-Range等暴露响应头,导致视频无法拖拽进度、断点续传失败;
  • 允许源格式错误:填写域名时遗漏http/https前缀,或多添加了末尾的斜杠,导致和实际请求的Origin无法匹配,出现跨域报错。

五、示例说明

某短视频平台需要允许PC端站点https://short.example.com、H5端站点https://m.example.com跨域访问存储桶中的视频资源,仅支持视频下载和播放,无需上传权限,对应的CORS规则JSON配置如下:

```json

[

{

"AllowedOrigins": [

"https://short.example.com",

"https://m.example.com"

],

"AllowedMethods": [

"GET",

"HEAD"

],

"AllowedHeaders": ["*"],

"ExposeHeaders": [

"Content-Length",

"Content-Range",

"ETag"

],

"MaxAgeSeconds": 86400

}

]

```

该配置生效后,上述两个域名的前端页面可以正常调用存储桶中的视频资源,支持进度条拖拽、断点续传等功能,其他未在列表中的域名调用时会触发跨域报错,避免资源被盗用。

六、更简单的方案

如果觉得原生AWS S3配置流程繁琐、国内访问延迟高,或者需要降低运维成本,可以选择兼容S3协议的对象存储服务简化流程,比如七彩云对象存储,它完全兼容S3 API,现有基于S3开发的视频存储、分发、转码代码无需任何修改即可无缝迁移,控制台提供可视化的CORS表单配置,无需手动编写JSON规则,新手也能快速完成配置,同时自带全国CDN节点加速,视频播放、下载的平均延迟比自行搭建S3+CDN架构低30%以上,配置完存储桶CORS后CDN会自动同步规则,无需额外配置CDN跨域。

七、FAQ

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

包括七彩云对象存储在内的主流S3兼容存储服务,CORS配置提交后即时生效,最长不超过1分钟,如果仍出现跨域报错,可清理浏览器缓存或使用无痕模式测试,排除本地缓存的旧规则影响。

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

测试阶段可以临时使用*快速验证功能,但生产环境不建议使用,会允许所有域名跨域访问你的存储资源,存在被盗链、恶意下载的风险,生产环境必须明确填写实际业务使用的域名清单。

3. 视频可以正常播放,但拖拽进度条就报错,是不是CORS的问题?

大概率是CORS配置问题,检查暴露的响应头中是否添加了Content-Range字段,播放器拖拽进度时需要通过这个字段获取对应分片的视频内容,未配置的话就会出现报错,添加该字段即可解决。

4. 我用了CDN加速存储桶的视频,需要单独配置CDN的CORS吗?

如果使用七彩云对象存储自带的CDN加速服务,存储桶的CORS配置会自动同步到CDN节点,无需额外配置;如果是自行对接的第三方CDN服务,需要同时在CDN控制台配置对应的CORS规则,否则仍然会出现跨域报错。

八、总结

整体配置流程可梳理为四个核心步骤:首先梳理业务所需的跨域域名清单,其次登录存储控制台进入目标视频存储桶的配置页,然后按照视频场景的要求填写CORS规则,重点注意添加必要的暴露响应头,最后保存验证即可。

建议生产环境严格限制允许的跨域域名,不要使用通配符降低安全风险,定期清理CORS规则中的过期域名。如果是面向国内用户的视频业务,优先选择兼容S3的国内对象存储服务如七彩云对象存储,既能减少跨域、CDN等配置成本,也能获得更稳定、更低延迟的视频分发体验。

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

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

访问七彩云官网

相关文章

视频存储方案 / / 8 分钟阅读

短视频存储自动转码加封面怎么实现

一、结论 你可以通过为对象存储配置上传事件触发规则,关联音视频转码和封面提取服务,实现短视频上传到存储后自动完成转码、封面生成全流程,无需人工干预或自行搭建转码服务器。如果选择内置媒体处理能力的对象存储服务,最快10分钟就能完成所有配置。

视频存储方案 / / 8 分钟阅读

m3u8视频存在对象存储怎么设置访问

一、结论 只需要将m3u8索引文件和对应的ts分片上传至对象存储桶,完成桶的访问权限、跨域规则配置,确认m3u8内的分片路径与实际存储路径一致,即可通过公网地址正常访问播放。如果是付费类非公开视频,额外配置签名访问规则即可实现可控访问。