【问题标题】:CORS error with listBuckets in AWS JS SDKAWS JS SDK 中 listBuckets 的 CORS 错误
【发布时间】:2016-05-02 10:48:44
【问题描述】:

我正在尝试使用 AWS JS 开发工具包在前端列出与授权用户关联的存储桶。

listBuckets API 文档: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listBuckets-property

并且,listBucket 请求失败并显示以下错误消息:

https://s3-us-west-2.amazonaws.com/。对预检请求的响应 没有通过访问控制检查:没有“Access-Control-Allow-Origin” 请求的资源上存在标头。起源 'http://palombpramalis.local:8888' 因此不允许访问。 响应的 HTTP 状态代码为 403。

如何为https://s3-us-west-2.amazonaws.com/ 配置 CORS?

AWS 文档仅讨论为特定存储桶配置 CORS http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring.html。 但此请求是为了列出经过身份验证的用户的所有存储桶。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    S3 区域端点,例如 s3-region.amazonaws.com 不支持 CORS。 CORS 仅在存储桶上受支持(在您启用它之后)。所以你不能调用 listBuckets。如果 AWS 启用此功能会很棒,但可能有令人信服的理由不这样做。

    如果需要,您可以通过在 Web 客户端中硬编码存储桶名称(不理想)或通过在存储在 S3 中的可读 JSON 文件中维护存储桶列表来解决此问题。就个人而言,我更喜欢后者,并会尝试使用AWS Lambda 来维护文件。当然,您也可以要求用户提供存储桶名称,但他们通常不会知道。

    【讨论】:

    • 感谢您的确认。后端 node.js 或 python 可以列出存储桶。所以我打算将此功能移至后端并在前端呈现列表
    • 我在考虑无服务器,但如果你有一个服务器,那么一个简单的 REST 调用来列出存储桶就可以了。
    • 拥有 JS listBuckets API 给人的印象是这是可能的;希望 AWS 文档可以清楚地说明此 API 仅适用于 node.js;在浏览器中不起作用。
    • 是的,同意。它实际上可以在不需要相同来源策略或可以禁用的任何地方工作。一些浏览器提供了禁用同源策略的选项,当然你不应该在测试之外运行。请注意,这也与直接针对 S3 端点的其他 API 调用有关,例如,我希望 createBucket 以同样的方式失败。
    猜你喜欢
    • 2014-09-01
    • 2021-08-06
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多