CORS。预签名网址。 S3

时间:2017-12-07 07:10:03

标签: amazon-s3

我已经生成了预先签名的S3 POST网址。使用返回参数,然后我将其传递给我的代码,但我不断收到此错误Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

而在Postman上,我可以使用一个附件提交表单数据。

在PostMan上,我手动输入参数 enter image description here

然后将相同的参数输入到我的代码中。 enter image description here

8 个答案:

答案 0 :(得分:8)

您必须将 CORS配置编辑为公开,例如:

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

enter image description here

答案 1 :(得分:1)

就我而言,我特别需要允许S3存储桶的CORS配置中的PUT方法使用预签名的URL,而不是接受的答案中的GET方法:

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

答案 2 :(得分:1)

我的问题是由于某种原因-getSignedUrl返回了这样的网址:

https://my-bucket.s3。我们西部2 .amazonaws.com / bucket-folder / file.jpg

我删除了区域部分-us-west-2-并将其修复了??‍??️

所以现在是

https://my-bucket.s3.amazonaws.com/bucket-folder/file.jpg

答案 3 :(得分:1)

无法评论,所以在这里添加。包含 Harvey 的回答,但采用文本形式以便于复制。

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

答案 4 :(得分:0)

我也遇到了这个问题。我在存储桶上的CORs配置似乎正确,但是我的预签名URL遇到了CORs问题。事实证明,我的AWS_REGION的签发者未设置到存储桶的aws区域。将AWS_REGION设置为正确的区域后,它可以正常工作。我很烦恼,CORS问题对一个简单的问题是如此困扰,浪费了我几个小时的时间。

答案 5 :(得分:0)

对我来说,这是因为我的存储桶名称中带有连字符(例如 my-bucket )。签名的URL将用下划线替换存储桶名称中的连字符,然后对其进行签名。所以这意味着两件事:

  1. CORS无法正常运行,因为该网址在技术上不正确
  2. 我不能只将下划线改回连字符,因为当AWS验证签名的URL时,签名将是错误的

我最终不得不将存储桶重命名为不带连字符的名称(例如 mybucket ),然后在以下配置下工作正常:

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

答案 6 :(得分:0)

在我的情况下,我通过 allowedMethods 和 S3 的起源来修复它。菜单位于“权限”选项卡下

enter image description here

答案 7 :(得分:0)

我的问题是我在“AllowedOrigins”域的末尾有一个斜杠 (/)。一旦我删除了斜杠,请求就会起作用。