无法通过BunnyCDN配合AWS S3实现HLS加密视频流的CORS问题排查求助
故障排查与修复方案
以下是你需要逐一核对的配置错误点:
1. 优先清理BunnyCDN全量缓存
BunnyCDN会将S3返回的响应头(含CORS头)和资源一起缓存,如果配置CORS前已有相关资源(m3u8/ts/key)被缓存,旧的无CORS头的响应会持续返回直到缓存过期。你需要先进入对应Pull Zone的Purge面板,清空所有缓存后再测试。
2. 修正BunnyCDN的CORS配置方式
不要通过自定义响应头配置CORS规则,BunnyCDN有原生CORS配置项优先级更高:
- 进入Pull Zone设置 → 找到「CORS」配置板块
- 添加允许的源站:
https://my-domain.com(不需要加CDN自身域名) - 勾选允许的请求方法:
GET、HEAD - 开启Allow Credentials选项(匹配你的请求凭据模式为true的要求)
- 保存配置后等待规则生效
3. 修正S3的CORS规则配置
你当前的S3 CORS配置在带凭据的请求场景下存在不生效的问题,修正后的参考规则如下:
[ { "AllowedHeaders": [ "Accept", "Range", "Content-Type" ], "AllowedMethods": [ "GET", "HEAD" ], "AllowedOrigins": [ "https://my-domain.com" ], "ExposeHeaders": [ "Content-Length", "Content-Range" ], "MaxAgeSeconds": 3000 } ]
修正点说明:
- 带凭据的请求不允许
AllowedHeaders使用通配符*,需要明确列出前端请求实际携带的请求头 - 移除了不需要的
PUT、POST方法和https://ovb-video.b-cdn.net源站(CORS校验的是前端发起请求的源站,CDN域名不属于请求源) - 补充了
ExposeHeaders配置,允许浏览器读取HLS拉流需要的响应头 - 新增
MaxAgeSeconds减少重复预检请求的频率
4. 确认CDN缓存键配置
检查BunnyCDN的缓存设置,确保没有开启「忽略查询参数」选项,你的请求URL中携带的bcdn_token等参数需要被纳入缓存键,避免不同源的请求拿到错误的缓存响应头。
内容的提问来源于stack exchange,提问作者Faisal Shaikh
相关产品推荐
相关产品推荐

