我正在开发一个ELB监控应用程序,我想用JS构建并直接在S3中托管。我没有JS的经验,我很难掌握CORS。
我已成功为我的浏览器(http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-building.html)创建了一个SDK版本,其中包含ELB API支持。
我已将Amazon登录(http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring-wif.html)与我的脚本集成,并将其附加到IAM WebIdentity角色。
当我打电话
elb.describeInstanceHealth(elbRequestParams).on('success', describeInstanceHealthCallback).send();
我在Javascript控制台中收到错误
XMLHttpRequest cannot load 'elasticloadbalancing.eu-west-1.amazonaws.com/'. The request was redirected to 'aws.amazon.com/elasticloadbalancing', which is disallowed for cross-origin requests that require preflight.
我找不到任何明确的文档,我正在尝试做的事情不起作用,但是,我承认我对文档中的一些术语感到困惑,我没有CORS的经验以前的申请可以依靠。如果大多数服务不是CORS意识的话,我认为浏览器的整个JS-SDK有点多余。
我可以通过在我的Chrome浏览器中禁用网络安全来实现这一点,显然这不是一个好的解决方法,但会告诉我CORS是问题。
是否有人熟悉这种方法,这是我在S3上托管的问题,或者,我是否会从任何服务器出现此问题?我应该使用CORS配置我的S3存储桶,还是“elasticloadbalancing.eu-west-1.amazonaws.com”端点上没有CORS策略?
由于
安德鲁
答案 0 :(得分:5)
我已成功为我的浏览器(http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-building.html)创建了一个SDK版本,其中包含ELB API支持。
引用的页面已经提供了第一个线索,表明缺少对elasticloadbalancing.eu-west-1.amazonaws.com
的CORS支持,你正确怀疑它是原因:
如果您在环境之外使用SDK 在您的浏览器中强制执行CORS并希望访问完整的色域 由 AWS SDK for JavaScript 提供的服务可以实现 通过克隆存储库和本地构建SDK的自定义副本 运行用于生成默认托管的相同构建工具 SDK的版本。
也就是说,官方AWS SDK for JavaScript in the Browser除了Working with Services in the Browser中支持的服务部分中列出的所有服务之外的所有服务的主要原因是他们缺乏CORS支持:< / p>
如果CORS可以将SDK与其他服务一起使用 您的环境中禁用了安全检查。在这种情况下,你 可以构建自己的SDK自定义版本。有关如何创建的更多信息,请参阅指南的Building the SDK部分 自定义构建SDK。
很遗憾,Amazon EC2和Elastic Load Balancing目前都不提供CORS支持,请参阅例如最近Feature Request (CORS support for EC2 service),作者正确地得出了与您已经相同的结论(同时也暗示Node.js是另一个主要用例,支持所有可用的AWS服务,请参阅Working with Services in Node.js):
从我的观点来看,如果AWS提供了一个aws-sdk-js库,那么这个库支持的所有AWS服务都应该支持CORS,这样aws-sdk-js的iibrary不仅可以在node.js环境中使用,而且还可以在浏览器中。
虽然我原则上同意并希望自己有更快的周转时间,但AWS以敏捷的产品开发方法而闻名,即早期开始使用小功能集并根据客户反馈随时间改进。值得注意的是,SDK仅标记为开发者预览,即使是 BETA ,我希望将来可以相应地解决这个问题 - 不可否认,这很容易被忽视,而且更多突出警告可能会让用户有时间自行解决这个限制。