Amazon s3 科尔斯。预先签名的URL。S3
我已经生成了一个预先签名的S3帖子URL。使用返回参数,然后将其传递到我的代码中,但我不断收到此错误Amazon s3 科尔斯。预先签名的URL。S3,amazon-s3,Amazon S3,我已经生成了一个预先签名的S3帖子URL。使用返回参数,然后将其传递到我的代码中,但我不断收到此错误对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许原点”标头。 而在邮递员,我可以提交一个附加文件的形式数据 在PostMan上,我手动输入了参数 然后将相同的参数输入到我的代码中。 您必须编辑CORS配置才能公开,例如: <?xml version="1.0" encoding="UTF-8"?> <CORSC
对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许原点”标头。
而在邮递员,我可以提交一个附加文件的形式数据
在PostMan上,我手动输入了参数
然后将相同的参数输入到我的代码中。
您必须编辑CORS配置才能公开,例如:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
在我的例子中,我特别需要允许S3 Bucket的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>
*
放
3000
*
我也遇到了这个问题。我的桶上的CORs配置似乎正确,但我预先指定的URL遇到了CORs问题。事实证明,我的预签名器的AWS_区域未设置为铲斗的AWS区域。将AWS_区域设置为正确的区域后,工作正常。我很恼火CORS问题对于一个简单的问题来说是一个大麻烦,浪费了我几个小时的时间。对我来说,这是因为我的bucket名称中有一个连字符(例如,我的bucket)。签名的URL将用下划线替换bucket名称中的连字符,然后对其进行签名。这意味着两件事:
CORS不起作用,因为URL技术上不正确
我不能仅仅将下划线改回连字符,因为当AWS验证签名的URL时,签名将是错误的
我最终不得不将我的bucket重命名为不带连字符的名称(例如,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>
*
得到
放
邮递
删除
3000
*
我的问题是,出于某种原因-getSignedUrl
返回了如下url:
https://my-bucket.s3.us-west-2.amazonaws.com/bucket-folder/file.jpg
我已经删除了region部分-us-west-2
-并且在我的案例中修复了它,我通过允许方法来修复它,并且起源于S3。该菜单位于“权限”选项卡下
无法发表评论,因此在此处添加此内容。包含哈维的答案,但采用文本形式,便于复制
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
没有意义,因为我可以通过邮递员上传。这是一个POST请求。不是很抱歉,我是说CORS配置。。我更新了答案。再次抱歉!谢谢你的提示。“允许头球:*”帮助了一点,我正在取得一些进展。让我困惑的是,同样的事情在邮递员身上也起了作用。但不是在我的code@ngzhongcaifwiw,这适用于postman和其他测试工具,因为postman不是一个网站。CORS是一种浏览器机制,防止站点a向站点B(即您的bucket)发出请求,除非站点B同意通过“飞行前检查”接受来自站点a查看者的请求。当您使用一个网站访问另一个网站时,浏览器需要CORS友好的响应,但邮递员不需要/使用/触发此安全机制,因为它实际上是为了保护用户和站点B不受站点A上潜在恶意代码的影响,并且在postman下没有站点A。这对Alloweader*不起作用,有人修复了吗?如果是文本,而不是其他人无法轻松复制的图像,这将是一个更好的答案。