如何区分Amazon S3的不同BadRequest错误?

时间:2016-02-19 15:46:23

标签: amazon-web-services amazon-s3

Amazon S3有大量reasons,它会返回HTTP 400 Bad Request错误。最相关的是,其中一些错误来自互联网的不可靠性,例如请求超时。可能返回的另一个原因是存储桶或密钥名称无效。

我正在尝试使用客户控制的密钥名称提供的密钥名称将文件上传到S3。我需要能够区分瞬态400错误(如超时)和错误的密钥/存储桶名称错误(不会是暂时的)。瞬态错误表示我们应该重试上传,而非暂时性错误意味着我们应该停止尝试上传该文件。

但是,我不知道如何区分这两个错误!如果重要,我会尝试使用JetS3t API来执行这些上传。如何区分错误的密钥/存储桶名称错误以及400错误代码?

1 个答案:

答案 0 :(得分:1)

阅读回复正文。

从您引用的页面:

  

主体o [f]响应还包含有关错误的信息。

解析伴随http错误代码的响应主体。错误的解释几乎总是在响应主体的XML中详细说明。

示例废话请求(此处没有编辑,这正是我用于生成此错误的GET请求):

http://example-bucket.s3.amazonaws.com/?AWSAccessKeyId=AKIAEXAMPLEEXAMPLE&Signature=bogus&Expires=1500000000

响应:

<Error>
 <Code>InvalidAccessKeyId</Code>
  <Message>
   The AWS Access Key Id you provided does not exist in our records.
  </Message>
 <AWSAccessKeyId>AKIAEXAMPLEEXAMPLE</AWSAccessKeyId>
 <RequestId>...</RequestId>
 <HostId>...</HostId>
</Error>

您会发现此内容与可能错误列表之间存在非常密切的关联。

现在,从技术上讲,这是403而不是400,这只是我想出的一个容易手工制作的无意义请求产生错误的第一个想法,但任何S3错误都应该产生类似的响应。