我如何解决 Amazon S3 发出的“Your socket connection to the server was not read from or written to within the timeout period”错误?

上次更新日期:2021 年 1 月 5 日

我尝试使用 AWS 命令行界面 (AWS CLI) 或 AWS 开发工具包将文件上传至 Amazon Simple Storage Service (Amazon S3)。但发生了错误。如何解决此问题?

简短描述

当您使用 AWS CLI 或 AWS 开发工具包将文件上传到 Amazon S3 时,您可能会收到以下错误:

Your socket connection to the server was not read from or written to within the timeout period. Idle connections will be closed. (Service: Amazon S3; Status Code: 400; Error Code: RequestTimeout)
注意:如果在运行 AWS CLI 命令时收到错误, 请确保您使用的是最新的 AWS CLI 版本

当客户端与 Amazon S3 服务器之间的连接空闲 20 秒或更长时间时,Amazon S3 会关闭连接。这会导致 400 RequestTimeout 错误。要排查此错误,请检查以下项:

  • “Content-Length”标头中设置的字节数量超过实际文件大小。
  • 网络问题,如高延迟、丢包和拥塞。

解决方法

“Content-Length”标头中设置的字节数量超过实际文件大小

当您发送 HTTP 请求至 Amazon S3 时,Amazon S3 预计会收到 Content-Length 标头中指定的数据量。如果 S3 未收到预计的数据量且连接空闲 20 秒或以上,则连接关闭。

因此,请确保验证发送到 Amazon S3 的文件大小。该文件必须与 Content-Length 标头中指定的文件大小一致。否则,你会收到 400 RequestTimeout 错误。

网络问题,如高延迟、丢包和拥塞

如果由于网络连接慢或连接不良导致丢失了数据包,则 S3 会等待接收预期数量的字节。如果连接空闲 20 秒或以上,S3 会关闭连接并返回 400 RequestTimeout 错误。要验证是否由此导致错误,执行数据包捕获并检查有无任何丢包。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?