因此我们使用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,他们都有同样的问题。
怎么回事?
答案 0 :(得分:1)
我可能没有这个问题的确切答案,但我有一些社区可能会发现有用的信息。
首先,您应该避免提供mixed content。我不清楚这是否会引发浏览器策略警报,但你无论如何都不应该这样做。最简单的解决方案是使用protocol-relative-url或在网址中明确指定https
。
其次,我也认为通配符的工作方式类似于glob。但是,我被告知它的工作方式与ssl证书规则相同 - 即对于所有子域或特定子域。换句话说,*.example.com
和www.example.com
有效但*.foo.example.com
无效。我想你想明确地添加你的桶:
BrowserPolicy.content.allowOriginForAll('our-bucket-name.s3.amazonaws.com')
除非你真的想要信任所有amazonaws.com
。