我有一些奇怪行为的 Amazon S3 存储桶。当一个类似于 GET /?delimiter=%2F&marker=&max-keys=1000&prefix= 的请求来获取内容或存储桶的“根”文件夹时,我将返回成功标头,但响应正文被延迟。根据我设置的超时时间,它可以接收身体的不同部位。看起来我在一秒钟后得到 < 符号?然后是 x、m、l 等等。几乎在每个字节之后接收到的数据会有一些延迟。如果我将请求超时设置为 100 秒,我几乎总是得到完整的响应。如果我将超时设置为 30 秒,我可以得到空的身体或类似“
这个奇怪的问题只发生在一个 S3 账户和该账户中的一个存储桶中。所有其他桶都很好。
我在使用工具s3cli时看到的行为相同。我使用了 https 流量嗅探器 ii 真的看到了字节是如何随着网络延迟而出现的。
但。当我为 Amazon S3 使用太 Cyberduck 时,它使用相同的存储桶运行速度很快!
我尝试尝试使用 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
Cyberduck 的要求是这样的
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) 重复相同的操作?
这里有什么秘密?