亚马逊S3。奇怪的铲斗行为,卷曲缓慢响应

时间:2019-09-23 13:12:59

标签: curl amazon-s3 cyberduck

我有一些奇怪行为的Amazon S3存储桶。 当类似于GET /?delimiter =%2F&marker =&max-keys = 1000&prefix =的请求获取内容或存储桶的“根”文件夹时,我将返回成功标头,但响应主体被延迟。根据我设置的超时时间,它可以接收身体的不同部位。 好像我在一秒钟后得到<符号?然后是x,m,l等。几乎每个字节之后都会延迟接收数据。 如果我将请求超时设置为100秒,我几乎总是会得到完整的响应。如果我将超时时间设置为30秒,我会得到空着的身体或类似“

这个奇怪的问题仅发生在一个S3帐户中,并且该帐户中只有一个存储桶。所有其他存储桶都可以。

使用工具 s3cli 时看到的行为相同。我使用了https流量嗅探器,我确实看到了网络延迟导致字节显示的情况。

但是。当我将太赛鸭用于Amazon S3时,它在同一个存储桶中可以快速运行!

我尝试试验http标头,使它们与cyberduck相同,但没有成功。对于我的基于curl的工具问题存在

我的要求就是这样

GET /?delimiter=%2F&marker=&max-keys=1000&prefix= HTTP/1.1
User-Agent: My S3 Explorer
Host: s4-******.s3.amazonaws.com
x-amz-request-payer: requester
X-Amz-Date: 20190920T151135Z
Date: Fri, 20 Sep 2019 15:11:35 GMT
x-amz-content-sha256: e3******55
Authorization: AWS4-HMAC-SHA256 *****
Connection: Keep-Alive

来自Cyber​​duck的请求就是这样

CONNECT s4-*********.s3.amazonaws.com:443 HTTP/1.1
Host: *********.s3.amazonaws.com:443
User-Agent: Cyberduck/7.0.1.30930 (Mac OS X/10.14) (x86_64)
HTTP/1.0 200 Connection established
GET /?max-keys=1000&versions&prefix&delimiter=%2F HTTP/1.1
Date: Fri, 20 Sep 2019 09:26:20 GMT
x-amz-request-payer: requester
x-amz-content-sha256: e3*********55
Host: s4-********.s3.amazonaws.com
x-amz-date: 20190920T092620Z
Authorization: ********
Connection: Keep-Alive
User-Agent: Cyberduck/7.0.1.30930 (Mac OS X/10.14) (x86_64)

它快速返回完整响应。但是为什么呢?

有一个区别,在发出请求之前,它执行了一些CONNECT命令(我从嗅探器中看到了这一点)。该命令会影响吗?如果是,如何对curl(php)重复相同的操作?

这里有什么秘密?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 如果我在请求中添加参数“&versions =“,则一切正常! 我不明白,但这是事实

GET /?delimiter=%2F&marker=&max-keys=1000&prefix=&versions= HTTP/1.1

无需任何其他更改即可正常工作。

更新。这个解决方案对我而言并不是真正的解决方案。我不想修改使用该额外参数的Amazon S3 API调用。我仍然希望找到更好的解决方案,因为这种情况看起来像Amazon S3在某些服务器上的服务器或设备或配置有问题