如何从 Amazon S3 排查错误“未在超时期内读取或写入至服务器的套接字连接”?

上次更新时间:2019 年 12 月 20 日

我尝试使用 AWS 命令行界面 (AWS CLI) 或 AWS 开发工具包将文件上传至 Amazon Simple Storage Service (Amazon S3)。但我收到了下列错误:
在超时期内,未读取或写入您至服务器的套接字连接。空闲的连接将会关闭。(服务:Amazon S3;状态代码:400;错误代码:RequestTimeout)

如何修复此问题?

解决方法

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

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

当您发送 HTTP 请求至 Amazon S3 时,Amazon S3 预计会收到 Content-Length 标头中指定的数据量。如果 Amazon S3 未收到预计的数据量且连接空闲 20 秒或以上,则连接关闭。请务必验证您发送至 Amazon S3 的实际文件大小与 Content-Length 标头中指定的文件大小一致。

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

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


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?