在 CloudFront + hls.js 上出现 CORS 错误

Getting CORS error on CloudFront + hls.js

场景

我正在使用 Cloudfront 在 S3 上提供我的 hls 视频并使用 hls.js 库播放它们

问题

有时我会收到 CORS 错误,奇怪的是如果我在浏览器中禁用缓存,它工作正常,但是当它使用缓存版本时它 returns CORS 错误

Access to XMLHttpRequest at 'https://a-subdomin.cloudfront.net/myvideo.m3u8' from origin 'https://www.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

配置

这是我的 Cloudfront 行为配置

这是我的 S3 CORS 配置

我试了很多方法,但我不知道是什么问题,我在想可能是关于 hls.js 库的问题!

我找到了这个问题的解决方案,它只发生在基于 Chromium 的浏览器上,要解决这个问题你也应该在非 CORS 请求中发送 varyheader.

在 AWS 中,您可以使用 Lambda 函数来执行此操作,示例如下:https://whosebug.com/a/57189635/3970050

Chromium 问题:https://bugs.chromium.org/p/chromium/issues/detail?id=409090

AWS 问题:https://forums.aws.amazon.com/thread.jspa?threadID=342401&tstart=0