3

背景

我们使用 Javascript 库 Three.JS 来可视化存储在 Amazon S3 上的模型。

我对所有模型都使用 JSONLoader。其他格式缺乏我们团队需要的工具链支持,而 COLLADA 或 OBJ 等常见格式似乎是包含加载程序库的二等公民(例如,在“示例”下的源代码树中可以找到它们。 . JSONLoader 位于核心加载程序文件夹中)。

我有大型模型文件,因此将它们及其相关资产存储在 Amazon S3 存储中,那里的带宽和空间相对便宜。目的是使用 Three.JS 的 Web 应用程序从我们在 Amazon 上的存储中加载模型,一切正常。

问题

不幸的是,这些模型是 Javascript 文件(例如“modelBlah.js”),当它们被 JSONLoader 加载时,任何理智的浏览器都会立即抱怨我们违反了脚本的同源策略这一事实——例如,我们'正在加载并尝试评估来自与调用脚本(这是应用程序的主要工具)不同域的脚本。

因此,我们似乎已经面对多年的网络安全最佳实践。

到目前为止的解决方案

  • 自己托管模型?我们现在正在使用 Heroku,理想情况下,我们希望使用专门标榜为“比特和带宽的大桶”的服务,而不是自己做。

  • 使用 DNAME 记录来欺骗资源的来源?不幸的是,这似乎不足以欺骗浏览器,因为用于媒体托管的子域仍然会激怒浏览器的安全性。

  • 使用 CORS,特别是 Access-Control-Allow-Origin 标头?Amazon S3 的简短浏览似乎不允许这样做,尽管我希望是错误的。即便如此,这样就够了吗?


有任何想法吗?

4

3 回答 3

2

您现在终于可以在 Amazon 上使用 CORS:http: //docs.amazonwebservices.com/AmazonS3/latest/dev/cors.html

于 2012-09-27T00:27:31.450 回答
0

你肯定需要 CORS,我认为 S3 允许它。否则,这个周末我不得不在启用了 CORS 的谷歌云存储上设置一个存储桶,这相当容易(使用 gsutil)。

于 2012-07-29T01:46:28.373 回答
0

S3 还不允许您设置 COR。为了解决这个确切的问题,我最终运行了一个 EC2 实例来充当下载模型的代理服务器。代理(当前只是运行节点)从 S3 获取文件,设置 CORs 标头并将其传递给应用程序。节点设置有很多选项,包括 knox 或 bufferjs。

于 2012-08-07T20:00:48.830 回答