我正忙着尝试从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中运行?
答案 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