使用Meteor浏览器策略包allowOriginForAll for AWS可以在http站点上运行,但不能在https上运行

时间:2013-11-06 22:58:03

标签: amazon-web-services https amazon-s3 meteor

因此我们使用Meteor浏览器策略包,并使用Amazon S3存储内容。

在服务器上,我们按如下方式设置了浏览器策略:

BrowserPolicy.content.allowOriginForAll('*.amazonaws.com');
BrowserPolicy.content.allowOriginForAll('*.s3.amazonaws.com');

在访问我们的http://网站时,这在本地开发和生产中都可以正常工作。但是,当我们的网站使用https://地址时,AWS内容不再通过此政策。

在控制台上放置以下错误

Refused to load the image 'http://our-bucket-name.s3.amazonaws.com/asset-stored-in-s3.png' because it violates the following Content Security Policy directive: "img-src data: 'self' *.google-analytics.com *.zencdn.net *.filepicker.io *.uservoice.com *.amazonaws.com *.s3.amazonaws.com".

正如您所看到的,我们在浏览器策略中允许其他一些来源,这些似乎在http和https中都能正常工作。 AWS S3是唯一失败的。

我尝试过Chrome,Firefox和Safari,他们都有同样的问题。

怎么回事?

1 个答案:

答案 0 :(得分:1)

我可能没有这个问题的确切答案,但我有一些社区可能会发现有用的信息。

首先,您应该避免提供mixed content。我不清楚这是否会引发浏览器策略警报,但你无论如何都不应该这样做。最简单的解决方案是使用protocol-relative-url或在网址中明确指定https

其次,我也认为通配符的工作方式类似于glob。但是,我被告知它的工作方式与ssl证书规则相同 - 即对于所有子域或特定子域。换句话说,*.example.comwww.example.com有效但*.foo.example.com无效。我想你想明确地添加你的桶:

BrowserPolicy.content.allowOriginForAll('our-bucket-name.s3.amazonaws.com')

除非你真的想要信任所有amazonaws.com