如果我生成的预签名 URL 已过期,我是否应该get_headers()
(在 PHP 中)查看是否403 Forbidden
引发错误,否则使用相同的 URL?或者这是一个坏主意,因为它是一个不必要的 GET 请求?我是否应该每次都重新生成一个新的预签名 URL?我有点困惑,因为似乎没有太多关于此的信息。
3 回答
URL 的过期时间。
签名版 2
htt ps://bucket.s3.amazonaws.com/foo.txt?AWSAccessKeyId=AKIAABCDEFGHIJK& Expires=1508608760 &Signature=xxxxxxxxxxx
Expires以 Unix 时间戳(以秒为单位)和协调世界时 (UTC) 给出时间。
$ date -d @1508608760
Sat Oct 21 17:59:20 UTC 2017
您可以提取该值并将其与 UTC [ time()
] 中的当前时间进行比较,然后决定是否重新生成。
签名版本 4
htt ps://s3.amazonaws.com/bucket/foo.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256& X-Amz-Expires=3600&X-Amz-Credential=AKIAJRZXXXXXXXXXus-east-1%2Fs3%2Faws4_request&X- Amz-SignedHeaders=主机& X-Amz-Date=20171021T190750Z &X-Amz-Signature=8b84ae9b59e9f8a8d7066ecc39e797c8dc29848abcdef61717
X-Amz-Date以 ISO 8601 格式提供 UTC 时间。
您可以提取该值,将其转换为 epoch/UTC 并将其与 UTC [time()] 中的当前时间进行比较,然后决定是否重新生成。
在 macOS 上,使用date -r 1535416265
.
If you use Memcached (or similar), you have the option to push the presigned url in Memcached with the same expiration time. Something like this (pseudo-php code):
$mc->set($your_key, $url, $expiration);
So, you can get the url using
$url = $mc->get($your_key);
If $mc->get returns false, you have to re-generate the presigned url.