我们使用Javascript库Three.JS来可视化存储在Amazon S3上的模型。
我为所有模型使用JSONLoader。其他格式缺乏我们团队所需的工具链支持,就像所包含的加载程序库一样,COLLADA或OBJ等常见格式似乎是二等公民(例如,在“示例”下的源代码树中找到它们。 .JSONLoader在核心加载器文件夹中。)
我有大型模型文件,因此将它们及其相关资产存储在Amazon S3存储上,其中带宽和空间相对便宜。目的是使用Three.JS的Web应用程序从我们在亚马逊上的存储加载模型,一切都很好。
不幸的是,这些模型是Javascript文件(例如“modelBlah.js”),当它们被JSONLoader加载时,任何理智的浏览器都会立即宣称我们违反了同源脚本策略 - 例如,我们正在加载并尝试评估来自与调用脚本不同的域的脚本(这是应用程序的主要线束)。
因此,看起来我们已经面对多年的网络安全最佳实践。
自己托管模型?我们现在正在使用Heroku,理想情况下我们想使用一种特别称为“大桶和带宽”的服务而不是做我们自己。
使用DNAME记录欺骗资源来源?不幸的是,这似乎不足以欺骗浏览器,因为用于媒体托管的子域仍会激怒浏览器安全性
使用CORS,特别是Access-Control-Allow-Origin标头?简要略读Amazon S3似乎不允许这样做,尽管我有点错误。即便如此,这还不够吗?
有什么想法吗?
答案 0 :(得分:2)
您现在终于可以在亚马逊上使用CORS:http://docs.amazonwebservices.com/AmazonS3/latest/dev/cors.html
答案 1 :(得分:0)
你肯定需要CORS,我认为S3允许它。否则,本周末我不得不在启用了CORS的Google云存储上设置一个存储桶,这很容易(使用gsutil)。
答案 2 :(得分:0)
S3还不允许您设置COR。为了解决这个问题,我最终运行了一个EC2实例作为下载模型的代理服务器。代理(当前只是运行节点)从S3获取文件,设置CORs头并将其传递给应用程序。节点设置有很多选项,包括knox或bufferjs。