CDN Cname jwplayer标题中的跨域问题

时间:2014-03-13 10:20:30

标签: amazon-web-services amazon-s3 cross-domain cdn jwplayer

我正在使用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 cnamehttpd.confphp.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> 有效   并且只有cname https://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'
             });

有用的链接:

Cross-origin_resource_sharing

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

how-do-i-enable-cors-in-cdn

Amazon S3 CORS (Cross-Origin Resource Sharing)

感谢您的帮助

1 个答案:

答案 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>

正如我在另一个answerquestion中所指出的那样,在CORS设置中不允许<AllowedOrigin>*</AllowedOrigin> *

因此,您仅使用Content-*设置的那些设置,如果第一次不能正常工作,请尝试将其设置为更具体,例如{{1}}

我希望我能帮助一点而不会造成进一步的混乱。祝你好运。