错误 – :响应是:307 – 试图上传到存储区时的临时redirect

当用Amazon的Ruby gem(2.10.2)上传到一个存储桶时,我得到了307。 另一个桶工作正常(都是今天创build的)。 我检查了这个名字,我没有拼错它。 什么是导致错误?

307是“Temporary Redirect”的HTTP代码。 根据这种redirect的S3文档 :

临时请求redirect

临时redirect是一种错误响应,向请求者发送信号,表明他应该将请求重新发送到不同的端点。

由于Amazon S3的分布式特性,请求可能会暂时路由到错误的设施。 在创build或删除存储桶之后,最有可能发生这种情况。 例如,如果您创build新的存储桶并立即向存储桶发出请求,则可能会收到临时redirect,具体取决于存储桶的位置限制。 如果您在美国东部(弗吉尼亚北部)地区(s3.amazonaws.com端点)创build存储桶,则不会看到redirect,因为这也是默认端点。 但是,如果在其他区域中创build了存储区,则在存储区的DNS条目被传播时,存储区的任何请求都将转到默认端点。 默认端点将使用HTTP 302 (原文)响应将请求redirect到正确的端点。

302s被用于这些redirect的说法在文档中似乎是错误的,因为它与您见过的行为,我见过的行为以及稍后在文档的同一页面中的“示例REST APIredirect”相矛盾。

所以你的select是:

  • 如果你不紧迫,就等着。 它会在几分钟或几小时内解决。
  • 如果您不需要这些redirect,请在美国东部地区创build所有存储桶。
  • 如果以上都不是一个选项,请确保您用于访问存储桶的任何HTTP客户端都能够跟踪redirect中的“ Location:标题并configuration为执行此操作。

等待在我的情况下没有帮助 – 我必须在AWS cloudfront控制台中使用path“/ *”将所有内容全部设置为无效,才能修复307,然后在转发到私有S3存储桶的后续“访问被拒绝”。