S3中添加CORS配置后仍出现CORS错误

5
我将尝试通过JavaScript上传图片到S3存储桶。在提交请求时,出现以下错误返回:
XMLHttpRequest cannot load https://somebucket.s3-us-west 
2.amazonaws.com/albums//apicture.png. Response to preflight 
request doesn't pass access control check: No 'Access-Control-Allow-Origin'
header is present on the requested resource. 
Origin 'http://someorigin:3000' is therefore not allowed access.

我的存储桶(bucket)的 CORS 配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://someorigin:3000</AllowedOrigin>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

我甚至手动将源添加到策略中,如您所见,还有*,但似乎没有任何作用,我不知道从哪里开始。

我查看了Chrome Devtools中的网络面板,并注意到其中一个XHR是apicture.png,它具有以下关键信息:

Request URL:https://somebucket.s3-us-west-2.amazonaws.com/pics/apicture.png
Request Method:OPTIONS
Status Code:301 Moved Permanently

响应选项卡还有其他重要信息:

<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>
<Bucket>somebucket</Bucket>
<Endpoint>somebucket.s3-us-west-1.amazonaws.com</Endpoint>
<RequestId>
***************
</RequestId>
</Error>

所以,很明显他们想要使用的区域是us-west-1,然而,如果我将我的AWS.config更改为那个区域,就会抛出另一个错误。亚马逊自己的指南说,"北加利福尼亚"这个地区被编码为us-west-2,所以我不确定为什么会存在这种不一致性。


响应预检请求 - 看起来预检请求失败了 - 你正在使用什么HTTP方法(GET、POST等)以及什么请求头 - 检查开发者工具网络选项卡以查看请求的详细网络流量。 - Jaromanda X
@JaromandaX,您是指POST请求中的哪个请求头?在“请求头”下面有很多选项。 - Marc Fletcher
不,只有非标准的触发器才会触发预检请求 - 根据消息显然是失败的关键点 - 不熟悉亚马逊S3,所以我无法真正帮助,除了指出预检(即OPTIONS调用)失败。 - Jaromanda X
这个存储桶实际上在哪个地区?北加利福尼亚州是us-west-1,而不是us-west-2(俄勒冈州)。 - jarmod
存储桶位于加利福尼亚州北部。如果我将代码更改为us-west-1,它会显示“OPTIONS https://cognito-identity.us-west-1.amazonaws.com/ net :: ERR_NAME_NOT_RESOLVED”,可能是因为身份池ID在us-west-2中,但我无法更改它,所以我真的很迷茫。 - Marc Fletcher
这可能是个小概率事件,但你最终解决了这个问题了吗,马克? - Bryant James
2个回答

3

现在你需要设置JSON。 权限 -> 跨源资源共享

[{
    "AllowedHeaders": [
        "*"
    ],
    "AllowedMethods": [
        "GET"
    ],
    "AllowedOrigins": [
        "*"
    ],
    "ExposeHeaders": []
}]

0

AWS S3 Bucket => 添加元数据 'Cache-Control' : 'no-cache'


这如何帮助Ajay Tiwari的问题?缓存控制是否以任何方式解决了CORS错误? - Rex Osariemen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接