Curl 亚马逊S3。奇怪的桶行为,反应缓慢,卷曲

Curl 亚马逊S3。奇怪的桶行为,反应缓慢,卷曲,curl,amazon-s3,cyberduck,Curl,Amazon S3,Cyberduck,我有一些奇怪的行为。 当请求类似于GET/?delimiter=%2F&marker=&max keys=1000&prefix=以获取内容或存储桶的“根”文件夹时,我将返回成功标头,但响应正文会延迟。根据超时设置,它可以接收身体的不同部位。 一秒钟后,我看起来像是得到了

我有一些奇怪的行为。 当请求类似于GET/?delimiter=%2F&marker=&max keys=1000&prefix=以获取内容或存储桶的“根”文件夹时,我将返回成功标头,但响应正文会延迟。根据超时设置,它可以接收身体的不同部位。 一秒钟后,我看起来像是得到了 使用工具s3cli时,我看到了相同的行为。我使用了https流量嗅探器,我真的看到了网络延迟时字节的显示方式

但是,当我在AmazonS3上使用To Cyberduck时,它在同一个bucket上运行得很快

我尝试尝试使用http头,使它们与cyberduck相同,但没有成功

我的要求和这个一样

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
赛博鸭的要求如下

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命令(我从sniffer中看到了这一点)。该命令会影响吗?如果是,如何使用curl(php)重复相同的操作

这里的秘密是什么?

我找到了解决办法。 如果我将参数“&versions=”添加到我的请求中,所有操作都正常! 我不明白,但这是事实

GET /?delimiter=%2F&marker=&max-keys=1000&prefix=&versions= HTTP/1.1
这在没有任何其他更改的情况下运行良好


更新。这个解决方案对我来说不是一个真正的解决方案。我不想用那个额外的参数修改Amazon S3 API调用。我仍然希望找到更好的解决方案,因为这个案例看起来Amazon S3有一些坏掉的服务器或设备,或者某些服务器上的配置

您是否尝试过使用bash中的curl,diff中的curl不同位置?使用不同版本的HTTP协议进行实验,最大密钥限制。可能主机解析速度较慢?我有类似问题,我的phpserver将一些包放到dns,我们与db的连接速度较慢。您使用的客户端可以缓存此包。如果您使用
aws s3 ls
命令访问存储桶,它是否工作得很快?它可以工作s3 cli工具的速度也一样慢。它会出现错误,出现“因超时而中断”的情况,可能s3 cli工具也有30秒超时。当我使用sniffer查看s3cli流量时,我看到只接收到一小部分xml。与我的php curl应用程序完全相同的行为。我发现唯一有效的工具是CyberDuck,我在不同的地方测试了这个应用程序。铲斗位于默认的S3区域(east1)。我在美国和欧洲进行了测试。curl和php在所有测试中都是相同的,但我认为这并不重要,因为S3cli工具也有这个问题