You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFront+S3架构下OPTIONS请求缺失CORS跨域头导致videojs无法播放视频

问题根因

你S3存储桶的CORS配置仅允许了GET、HEAD方法,浏览器发送的CORS预检请求为OPTIONS方法,S3不会为未被允许的方法返回对应的CORS响应头,这就是OPTIONS请求缺失Access-Control-Allow-Origin头的核心原因。

具体修复步骤

1. 修改S3存储桶CORS规则

在AllowedMethods中新增OPTIONS方法,同时删除无效的暴露头配置,修正后完整配置如下:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "HEAD",
            "OPTIONS"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "Content-Length",
            "Accept-Ranges",
            "Content-Range"
        ],
        "MaxAgeSeconds": 3000
    }
]

注:Access-Control-Allow-Origin是CORS标准响应头,不需要手动配置到ExposeHeaders中

2. 调整CloudFront缓存策略

你当前缓存策略的包含头部列表中加入了Access-Control-Allow-Origin,这是响应头不能作为缓存键的组成部分,直接删除该项,保留以下三个请求头即可:

  • Origin
  • Access-Control-Request-Method
  • Access-Control-Request-Headers

3. 清理CloudFront缓存

对CloudFront分发执行/*全路径缓存失效,清掉之前已经缓存的错误OPTIONS响应,等待10-15分钟配置生效后再测试即可。

可选优化

可以将CloudFront响应头策略中的Access-Control-Max-Age调整为86400,降低浏览器重复发送预检请求的频率,提升加载速度。

修改完成后,videojs发送的OPTIONS预检请求就能拿到正确的CORS响应头,后续的分片GET请求会正常发送,视频即可正常播放。

内容的提问来源于stack exchange,提问作者Joseph Van Riper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:06:00