当我使用 Amazon 的 Ruby gem (2.10.2) 上传到 bucket 时,我得到了 307。另一个 bucket 工作正常(都是今天创建的)。我检查了名称,没有拼写错误。是什么导致了错误?
答案1
307 是“临时重定向”的 HTTP 代码。根据S3 文档在这样的重定向上:
临时请求重定向
临时重定向是一种错误响应,它向请求者发出信号,表明他应该将请求重新发送到不同的端点。
由于 Amazon S3 的分布式特性,请求可能会被临时路由到错误的设施。这种情况最有可能在创建或删除存储桶后立即发生。例如,如果您创建一个新存储桶并立即向该存储桶发出请求,您可能会收到临时重定向,具体取决于存储桶的位置约束。如果您在美国东部(弗吉尼亚北部)区域(s3.amazonaws.com 终端节点)创建了存储桶,您将看不到重定向,因为这也是默认终端节点。但是,如果在任何其他区域创建存储桶,则在传播存储桶的 DNS 条目时,对该存储桶的任何请求都将转到默认终端节点。默认终端节点将使用 HTTP 302 将请求重定向到正确的终端节点(原文如此)回复。
声称这些重定向使用 302 似乎是文档中的一个错误,因为它与您所见证的行为、我所见证的行为以及文档同一页后面的“示例 REST API 重定向”相矛盾。
因此你的选择是:
- 如果您不觉得紧急,只需等待;它会在几分钟或几小时内自行修复。
- 如果您需要这些重定向永不发生,请在美国东部地区创建所有存储桶。
- 如果以上两种方法都不行,请确保您用来访问存储桶的 HTTP 客户端能够遵循
Location:
重定向中的标头并进行配置。
答案2
对我来说,等待并没有帮助——我必须在 AWS cloudfront 控制台中使路径为“/*”的所有内容无效,以修复 307 以及随后在转发到私有 S3 存储桶时出现的“访问被拒绝”问题。
答案3
简而言之,新创建的 S3 尚未准备好,请等待几分钟、几小时甚至一天。
AWS官方解答
AWS 知识中心:为什么我会从 Amazon S3 收到 HTTP 307 临时重定向响应?
上次更新时间:2021-04-05
当我向 Amazon Simple Storage Service (Amazon S3) 存储桶发送请求时,Amazon S3 返回 307 临时重定向响应。为什么我会收到此错误?
解决
创建 Amazon S3 存储桶后,存储桶名称可能需要最多 24 小时才能传播到所有 AWS 区域。在此期间,您可能会收到针对与存储桶不在同一区域的区域终端节点的请求的 307 临时重定向响应。有关更多信息,请参阅临时请求重定向。
为了避免 307 临时重定向响应,请仅将请求发送到与您的 S3 存储桶位于同一区域的区域终端节点:
如果您使用 AWS 命令行界面 (AWS CLI) 访问存储桶,请配置 AWS CLI。您的 AWS CLI 必须与您的 Amazon S3 存储桶位于同一区域。
注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新 AWS CLI 版本。
如果您使用的是具有 Amazon S3 源的 Amazon CloudFront 分发,CloudFront 会将请求转发到默认 S3 终端节点 (s3.amazonaws.com)。默认 S3 终端节点位于 us-east-1 区域。如果您必须在创建存储桶后的前 24 小时内访问 Amazon S3,则可以更改分发的源域名。域名必须包含存储桶的区域终端节点。例如,如果存储桶位于 us-west-2,您可以将源域名从 awsexamplebucketname.s3.amazonaws.com 更改为 awsexamplebucket.s3.us-west-2.amazonaws.com。
提示:为了减少 DNS 重定向和 DNS 传播问题的数量,请在所有 HTTP 请求中指定存储桶的 AWS 区域。例如,如果您使用 AWS CLI,请在请求中包含 --region 参数以指定 AWS 区域。