Amazon S3 — Как проверить, не истек ли срок действия предварительно назначенного URL?

Если у меня есть созданный предварительно назначенный URL, срок действия которого истек, я должен делать get_headers() (в PHP), чтобы увидеть, если 403 Forbidden выдается ошибка, в противном случае использовать тот же URL? Или это плохая идея, потому что это ненужный запрос GET? Должен ли я всегда просто заново генерировать новый предварительно назначенный URL каждый раз? Я немного сбит с толку, потому что, кажется, не так много информации об этом.

7

Решение

У URL есть время истечения.

Подпись Версия 2

https: //bucket.s3.amazonaws.com/foo.txt? AWSAccessKeyId = AKIAABCDEFGHIJK&Истекает = 1508608760&Подпись = XXXXXXXXXXX

Истекает дает время в UTC.

$ date -d @1508608760
Sat Oct 21 17:59:20 UTC 2017

Вы можете извлечь значение и сравнить его с текущим временем в UTC [time()], тогда решите регенерировать или нет.


Подпись Версия 4

HTT
пс: //s3.amazonaws.com/bucket/foo.txt X-Amz-Algorithm = AWS4-HMAC-SHA256&
X-Amz-Истекает = 3600&X-Amz-удостоверени = AKIAJRZXXXXXXXXus-восток-1% 2Fs3% 2Faws4_request&X-Amz-SignedHeaders = хост&X-Amz-Date = 20171021T190750Z&X-Amz-Подпись = 8b84ae9b59e9f8a8d7066ecc39e797c8dc29848abcdef61717

X-Amz-Date дает время UTC в формате ISO 8601.

Вы можете извлечь значение, преобразовать его в эпоху / UTC и сравнить его с текущим временем в UTC [time ()], а затем принять решение о восстановлении или нет.

9

Другие решения

Если вы используете Memcached (или аналогичный), у вас есть возможность отправить предопределенный URL-адрес в Memcached с тем же сроком действия.
Примерно так (псевдо-php код):

$mc->set($your_key, $url, $expiration);

Таким образом, вы можете получить URL с помощью

$url = $mc->get($your_key);

Если $ mc-> get возвращает false, вы должны заново сгенерировать предварительно назначенный URL.

0

На macOS используйте date -r 1535416265,

0
По вопросам рекламы [email protected]