从S3和CloudFront提供Angular JS HTML模板 - CORS问题

时间:2013-03-18 23:21:23

标签: amazon-s3 angularjs jsonp cors amazon-cloudfront

我正忙着尝试从Amazon CloudFront提供静态HTML模板。

我可以在Firefox上为我在S3上托管的HTML执行jQuery.get就好了。 CloudFront的相同内容返回OPTIONS 403 Forbidden。而且我无法在Chrome上为S3或CloudFront文件执行ajax get。我认为Angular有同样的问题。

我不知道它是如何获取远程模板的,但它返回与jQuery.get相同的错误。根据亚马逊技术支持,我的CORS配置很好,正如我所说,我可以在Firefox上直接从S3获取文件,因此它适用于一个案例。

我的问题是,如何让它在所有浏览器和CloudFront以及Angular templateUrl中运行?

2 个答案:

答案 0 :(得分:1)

对于来自谷歌的人来说,更多

当CORS设置在S3存储桶上时,亚马逊确实通过SSL支持CORS。当cloudfront缓存CORS响应的标头时,会出现这个不好的部分。如果你是从一个可能混合的来源获取http& https你会遇到来自CloudFront的允许来源会说http但你想要https的情况。这当然会导致浏览器爆炸。更糟糕的是,如果您接受压缩内容,CloudFront将缓存略有不同的版本。因此,如果你尝试用curl调试它,你会认为一切都很好然后发现它不在浏览器中(尝试传递--compressed to curl)。

一个令人沮丧的解决方案就是放弃整个CloudFront,直接从S3存储桶中提供服务。

答案 1 :(得分:0)

看起来亚马逊目前不支持CloudFront或S3上的SSL和CORS,这是问题的症结所在。其他CDN(如Limelight或Akamai)允许您将SSL证书添加到CNAME以解决问题,但亚马逊不允许其中任何一个和其他CDN成本过高。最好的替代方案似乎是从您自己的域上的服务器提供html。这是Angular和Rails的解决方案:https://stackoverflow.com/a/12180837/256066