我正在使用Jwplayer 6.8并在某个服务器www.example.com上安装我的jwplayer。我正在从CDN d2cdnserver.cloudfront.com加载vtt格式的字幕(cname - example.amazon.com, {{ 1}} ),它正在抛出跨域错误。
来源链接: Jwplayer crossdomain Issue
我必须在服务器端添加响应标头,I am loading my subtitle using cname
,httpd.conf
和php.ini
文件,但它似乎不起作用。
我通过cname example.amazon.com访问我的文件, 当我将此cname更改为我的亚马逊S3网址(“https://s3.amazonaws.com/www.abcdef.com/files/myfiles”)时,它可以工作,即使没有跨域问题也没有在cdn中设置access-control-allow-origin ,但是如果我使用 cloudfront cname,那么它总是显示跨域错误并且文件未加载。
如何在htaccess
中解决此问题?有没有办法CDN and CNAME
为cname?
顺便说一下,我为allow access-control-allow-origin
尝试了allow access-control-allow-origin
。它对cloudfront cname没什么帮助。
我的AWS CORS配置
首先,CDN
和cname https://s3.amazonaws.com/www.abcdef.com/files/myfiles
都会引发跨域错误
但是当我尝试下面的默认配置时
example.amazon.com
AWS网址
<CORSConfiguration> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>Authorization</AllowedHeader> </CORSRule> </CORSConfiguration>
有效 并且只有cnamehttps://s3.amazonaws.com/www.abcdef.com/files/myfiles
会引发跨域错误
我也试过下面的配置但它仍然会导致同样的错误,cname仍然会抛出跨域错误
example.amazon.com
我做错了吗?执行此配置以避免跨域问题的正确方法是什么?
我的JWPLAYER设置
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://*.example.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
function videoSetUp(id, skinName){
jwplayer('player'+id).setup({
file: 'http://example.amazon.com/files/test.mp4',
image: 'https://www.longtailvideo.com/content/images/jw-player/lWMJeVvV-876.jpg',
stretching : 'exactfit',
aspectratio: '4:3',
fallback: 'false',
height:270,
width:480,
primary: 'HTML5',
tracks: [
{ file: "https://s3.amazonaws.com/www.abcdef.com/files/jwplayer_test_eng.vtt", label: "Eng", kind: "subtitles" },
{ file: "https://s3.amazonaws.com/www.abcdef.com/files/jwplayer_test_hak.vtt", label: "China", kind: "subtitles" },
{ file: "https://s3.amazonaws.com/www.abcdef.com/files/jwplayer_test_tam.vtt", label: "Tamil", kind: "subtitles" },
{ file: "https://s3.amazonaws.com/www.abcdef.com/files/jwplayer_test_eng.vtt", label: "Hindi", kind: "subtitles" }
],
skin :'./skins/'+skinName+'.xml'
});
how-to-add-an-access-control-allow-origin-header
access-control-allow-origin-multiple-origin-domains
configure-amazon-s3-for-cross-origin-resourse-sharing-to-host-a-web-font
amazon-s3-announces-cross-origin-resource-sharing-CORS-support
Amazon S3 CORS (Cross-Origin Resource Sharing)
答案 0 :(得分:1)
感谢您对question的评论求助。
我会在黑暗中盲目刺伤,只是在你的CORS配置。我不确定CNAME别名如何改变任何东西。所以原谅我,因为我也不熟悉jwplayer。
这是您当前的CORS策略配置:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://*.example.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
我看到的可能错误出现在第一个<CORSRULE>
组中。
第一个<AllowedOrigin>
应该是访问您的存储桶资源的网站。
例如,如果您在网站http://domain1.example.com
上访问您的存储分区(无论是否为CNAME,都无关紧要)。将两个来源设置为请求的来源:
<AllowedOrigin>http://example.com</AllowedOrigin>
<AllowedOrigin>http://*.example.com</AllowedOrigin>
第二个问题是你的<AllowedMethod>
。您应该从浏览器的开发人员面板(我不确定jwplayer是否隐藏请求)中了解jwplayer发送到S3存储桶服务器的HTTP请求的类型。最有可能的是HTTP GET
。因此,您需要在第一个<CORSRule>
组中使用此行:
<AllowedMethod>GET</AllowedMethod>
第三,让我们看一下jwplayer发送给服务器的HTTP Headers
。首先尝试<AllowedHeader>
放置Authorization
,但是您应该在浏览器的开发人员面板中查看它在服务器上触发的HTTP Header
类型。首先尝试使用:
<AllowedHeader>*</AllowedHeader>
正如我在另一个answer的question中所指出的那样,在CORS设置中不允许<AllowedOrigin>*</AllowedOrigin>
*
。
因此,您仅使用Content-*
设置的那些设置,如果第一次不能正常工作,请尝试将其设置为更具体,例如{{1}}
我希望我能帮助一点而不会造成进一步的混乱。祝你好运。