amazon-web-services - S3 - Cloudfront - Access-Control-Allow-Origin 标头
问题描述
我有一个存储 hls 文件的 s3 存储桶,如果使用默认的 s3 url,我需要能够在播放器中流式传输这些文件,它可以工作,但不安全。
我阅读并发现您可以使用 CloudFront 并创建签名的 url 或 cookie。然后我使用以下选项创建了一个新发行版
Origin Domain Name: Name of my s3 bucket
Restrict Bucket Access: yes
Create a New Identity
Yes, Update Bucket Policy
Allowed HTTP Methods: GET, HEAD, OPTIONS
Cached HTTP Methods: select checkbox OPTIONS
Use legacy cache settings
And then I selected whitelist and choose
Access-Control-Request-Headers
Access-Control-Request-Method
Origin
最后我选择了
Restrict Viewer Access (Use Signed URLs or Signed Cookies): yes
创建发行版后,我尝试通过 zxxxx.cloudfront.net/ls/600/10/playlist.m3u8 访问文件
我得到了Missing Key-Pair-Id 查询参数或 cookie 值
到目前为止,我认为一切正常。
我创建了一个 ruby 脚本来获取这些证书
CloudFront-Policy
CloudFront-Signature
CloudFront-Key-Pair-Id
如果那时我尝试使用 cookie 或 url 访问文件
zxxxx.cloudfront.net/ls/600/10/playlist.m3u8?Policy=&Signature=&Key-Pair-Id
我能够下载该文件,这意味着一切正常。
问题是当我尝试通过我的 rails 应用程序访问文件时,我收到消息:已被 CORS 策略阻止
我阅读并发现请求应该来自同一个域以便能够发送 cookie
然后我在名为 cloud.example.com 的云端分发中添加了一个 CNAME 在
本地我在名为 dev.example 的主机文件中创建了一条记录.com,端口 80
再次尝试播放该文件,我仍然收到相同的错误:
'http://cloud.example/hls/600/10/playlist.m3u8' from origin 'http://dev.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
桶里的cors是
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
<AllowedHeader>Range</AllowedHeader>
</CORSRule>
</CORSConfiguration>
谁能帮我?
解决方案
推荐阅读
- python - Numpy 错误“ValueError:找到昏暗 3 的数组。预计估计器 <= 2。”
- vb.net - DataTable to list in VB.Net
- angular - 在 ngx-charts 热图上显示值
- java - 有没有办法在groovy的字符串中自动设置windows路径?
- arrays - 根据条件从 Scala 数组中获取结果
- server - Ansible vars 库存
- mongodb - Mongodb聚合,与group by混淆
- python-3.x - 如何在谷歌 colab 中使用 Blender?
- java - 线程并发问题
- python - 如何将具有连接像素的形状拆分为二值图像中的两个部分