Amazon S3 排错最佳实践
许多错误响应包含额外的结构化数据,旨在供开发人员阅读和理解以诊断编程错误。例如,如果您使用与服务器上计算出的摘要不匹配的 REST PUT 请求发送 Content-MD5 标头,您将收到 BadDigest 错误。错误响应还包括我们计算出的摘要的详细元素,以及预期内容的摘要。在开发过程中,您可以使用此信息诊断错误。在生产过程中,运行良好的程序可能会将此信息包含在其错误日志中。
设计使用 Amazon S3 的应用程序时,正确处理 Amazon S3 错误非常重要。本节描述了设计应用程序时,您应该考虑的问题。
重试 InternalErrors
内部错误是指在 Amazon S3 环境中发生的错误。
可能还没有处理收到 InternalError 响应的请求。例如,如果 PUT 请求返回 InternalError,则后续的 GET 操作可能会检索旧的值或更新的值。
如果 Amazon S3 返回 InternalError 响应,请重新提交请求。
针对重复的 SlowDown 错误调整应用程序
与其他分布式系统一样,S3 的保护机制能够检测出有意或无意的资源过度消耗,并做出相应的反应。在较高的请求速率触发了其中某个保护机制后,将发生 SlowDown 错误。降低您的请求速率将减少或消除此类型的错误。一般而言,大多数用户不会经常遇到这些错误;但是,如果您希望了解更多信息,或遇到了严重或意外的 SlowDown 错误,请将该错误发布到我们的 Amazon S3 开发人员论坛
隔离错误
注意
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> 元素。