【问题标题】:IMG tag sourcing AWS S3 fails - CORB?IMG 标签采购 AWS S3 失败 - CORB?
【发布时间】:2020-06-10 11:03:33
【问题描述】:

我想在 AWS 存储桶上托管 Web 项目的图像,然后在呈现 HTML 时动态拉取它们。这给我带来的麻烦比我预期的要多。

这是有问题的标签:

<img src="https://s3.us-east-2.amazonaws.com/ibidnyc/Summer Smith/VERBAL/subsections/Summer-Smith-VERBAL-subtopic-POETRY-fig.jpg" alt="">

当我这样做时,我收到一个跨域读取阻止 (CORB) 错误(在检查器中;我正在运行 Chrome) - 显然,Chrome 在某些情况下会阻止链接到其他网站上的 img 源?粗略的搜索把我带到了这里 (zyst.io/how-to-fix-aws-s3-chrome-and-safari-cors-on-images),但我不知道如何应用它。此外,这篇文章针对的是 CORS,而不是 CORB(我认为它是更新的?)。

【问题讨论】:

  • 对于初学者来说,这是您存储桶的错误 URL。接下来,它是无效的......你不能在里面有空格。请改用%20。最后,该资源要么不存在,要么公众无法访问。
  • 我有类似的问题,但我使用 Storj 作为我的对象存储。我分享了我的 标签的链接,但它不起作用。我刚收到 CORB 问题。

标签: html amazon-web-services hosting cross-origin-read-blocking


【解决方案1】:

Here's a good StackOverflow post relating to CORB.

具体来说,这是我认为可能有帮助的部分:

在大多数情况下,被阻止的响应不应影响网页的行为,并且可以安全地忽略 CORB 错误消息。例如,当被阻止的响应的主体已经为空时,或者当响应将被传递到无法处理它的上下文(例如,HTML 文档,如 404 错误页面)时,可能会出现警告被传递到<img> 标签)。

https://www.chromium.org/Home/chromium-security/corb-for-developers

尝试清除缓存并确保从该 AWS 链接返回的数据确实是图像而不是其他类型的数据。当我在浏览器中打开该 AWS 链接时,我得到一个 XML 错误页面,而不是图像:

<Error>
    <Code>PermanentRedirect</Code>
    <Message>
       The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
    </Message>
    <Endpoint>s3.amazonaws.com</Endpoint>
    <Bucket>ibidnyc</Bucket>
    <RequestId>FF65E772274735DF</RequestId>
    <HostId>
        VW+SBil/6NVWG5lx0F1XmWSDJLTjwaTHbBPoVQQlDNV+71NY4eDQLJraGtM+pBSyjas3ByFKIis=
    </HostId>
</Error>

在研究那个 XML 错误时,我发现这个存储桶很可能是在不同的区域创建的,即不是 us-east-2。这是我唯一一次看到这个端点错误。

美国标准是 us-east-1

将您的 URL 更改为 us-east-1 后,我现在收到 AccessDenied 错误,因此我假设已找到该图像并且您将能够访问它。

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>19E4B33430F54214</RequestId>
    <HostId>
        MF/m6yUhslgB3aB3ddoqnKwRAeABQq17wkaIqX09hwrvaZ+jPm8oIEVAY9HQpG5MShOp1Jf/HIg=
    </HostId>
</Error>

【讨论】:

    【解决方案2】:

    事实证明@Brad 是对的。虽然我已将存储桶实例化为公开的,但上传到该存储桶的单个图像仍然是私有的。

    将存储桶策略更改为这个就可以了(感谢h3xed.com!):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "PublicReadGetObject",
          "Action": "s3:GetObject",
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::[bucket_name_here]/*",
          "Principal": "*"
        }
      ]
    }
    

    Bucket policy editing explained here.

    感谢所有贡献者!

    【讨论】:

      猜你喜欢
      • 2019-06-16
      • 2021-09-11
      • 1970-01-01
      • 2018-09-24
      • 2020-09-25
      • 2017-04-12
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多