0

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

这个奇怪的问题只发生在一个 S3 账户和该账户中的一个存储桶中。所有其他桶都很好。

我在使用工具s3cli时看到的行为相同。我使用了 https 流量嗅探器 ii 真的看到了字节是如何随着网络延迟而出现的。

但。当我为 Amazon S3 使用太 Cyber​​duck 时,它使用相同的存储桶运行速度很快!

我尝试尝试使用 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) 重复相同的操作?

这里有什么秘密?

4

1 回答 1

0

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

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

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

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

于 2019-09-24T07:47:50.980 回答