Amazon S3.Странное поведение ковша, медленная реакция с завитком - PullRequest
0 голосов
/ 23 сентября 2019

Я получил ведро Amazon S3 со странным поведением.Когда к запросу, подобному GET /? Delimiter =% 2F & marker = & max-keys = 1000 & prefix =, чтобы получить содержимое или «корневую» папку сегмента, я получаю заголовки успеха обратно, но тело ответа задерживается.В зависимости от тайм-аута я могу принимать различные части тела.Похоже, я получаю <символ, через секунду?а позже х, м, л и т. д.Данные принимаются с некоторыми задержками почти после каждого байта.Если я установил тайм-аут запроса на 100 секунд, у меня почти всегда будет полный ответ.Если установить тайм-аут на 30 секунд, я могу получить пустое тело или что-то вроде "<p>. Эта странная проблема возникает только в одной учетной записи S3 и с одной корзиной в этой учетной записи. Все остальные корзины в порядке.

То же поведениея вижу, когда использую инструмент s3cli . Я использовал анализатор трафика https ii, действительно вижу, как байты появляются с задержкой из сети.

НО. Когда я использую слишком Cyberduck для Amazon S3, он работает быстро с тем же сегментом!

Я попытался поэкспериментировать с заголовками http, сделать их такими же, как cyberduck, но безуспешно. Для моего инструмента на основе завитков существует проблема

Мой запрос такойone

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)?

В чем здесь секрет?

1 Ответ

0 голосов
/ 24 сентября 2019

Я нашел решение.Если я добавлю аргумент "& версии =" к моему запросу, все работает отлично!Я не понимаю этого, но это факт

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

Это прекрасно работает без каких-либо других изменений.

ОБНОВЛЕНИЕ .Это решение на самом деле не решение для меня.Я не хочу изменять вызовы API Amazon S3, которые я делаю с этим дополнительным аргументом.Я все еще надеюсь найти какое-то лучшее решение, потому что в этом случае похоже, что Amazon S3 имеет какой-то сломанный сервер или оборудование или конфигурацию на каком-либо сервере

...