

# Amazon S3 排错最佳实践
<a name="ErrorBestPractices"></a>

许多错误响应包含额外的结构化数据，旨在供开发人员阅读和理解以诊断编程错误。例如，如果您使用与服务器上计算出的摘要不匹配的 REST PUT 请求发送 Content-MD5 标头，您将收到 BadDigest 错误。错误响应还包括我们计算出的摘要的详细元素，以及预期内容的摘要。在开发过程中，您可以使用此信息诊断错误。在生产过程中，运行良好的程序可能会将此信息包含在其错误日志中。

设计使用 Amazon S3 的应用程序时，正确处理 Amazon S3 错误非常重要。本节描述了设计应用程序时，您应该考虑的问题。

## 重试 InternalErrors
<a name="UsingErrorsRetry"></a>

内部错误是指在 Amazon S3 环境中发生的错误。

可能还没有处理收到 InternalError 响应的请求。例如，如果 PUT 请求返回 InternalError，则后续的 GET 操作可能会检索旧的值或更新的值。

如果 Amazon S3 返回 InternalError 响应，请重新提交请求。

## 针对重复的 SlowDown 错误调整应用程序
<a name="UsingErrorsSlowDown"></a>

与其他分布式系统一样，S3 的保护机制能够检测出有意或无意的资源过度消耗，并做出相应的反应。在较高的请求速率触发了其中某个保护机制后，将发生 SlowDown 错误。降低您的请求速率将减少或消除此类型的错误。一般而言，大多数用户不会经常遇到这些错误；但是，如果您希望了解更多信息，或遇到了严重或意外的 SlowDown 错误，请将该错误发布到我们的 [Amazon S3 开发人员论坛](https://forums.aws.csdn.net/)或在以下网址注册 Amazon Web Services Support：[(https://aws.amazon.com/premiumsupport/)](https://www.amazonaws.cn/premiumsupport/)。

## 隔离错误
<a name="UsingErrorsIsolate"></a>

**注意**  
 Amazon S3 的 SOAP API 不适用于新客户，并将于 2025 年 8 月 31 日接近使用寿命终止（EOL）。我们建议您使用 REST API 或 Amazon 开发工具包。

 Amazon S3 提供了一组由 SOAP 和 REST API 共同使用的错误代码。SOAP API 将返回标准的 Amazon S3 错误代码。REST API 的设计与标准的 HTTP 服务器相似，它与现有的 HTTP 客户端 (例如，浏览器、HTTP 客户端库、代理、缓存等等) 进行交互。为了确保 HTTP 客户端能够正确地处理错误，我们将每个 Amazon S3 错误都映射为一个 HTTP 状态代码。

 HTTP 状态代码没有 Amazon S3 错误代码那样直观，并且包含的错误信息也较少。例如，`NoSuchKey` 和 `NoSuchBucket` Amazon S3 错误均映射为 `HTTP 404 Not Found` 状态代码。

 尽管 HTTP 状态代码包含较少的错误信息，但能够理解 HTTP 而不是 Amazon S3 API 的客户端通常能够正确地处理错误。

 因此，处理错误或向最终用户报告 Amazon S3 错误时，请使用 Amazon S3 错误代码而不是 HTTP 状态代码，这是因为前者包含最详细的错误信息。此外，调试应用程序时，您还应该参考 XML 错误响应的人类可读的 <Details> 元素。