如果我生成的Presigned URL已过期,我应该get_headers()
(在PHP中)查看是否抛出403 Forbidden
错误,否则使用相同的URL?或者这是一个坏主意,因为它是一个不必要的GET请求?我是否应该每次只重新生成一个新的Presigned URL?我有点困惑,因为似乎没有太多关于此的信息。
答案 0 :(得分:11)
网址的有效时间为。
签名版本2
htt ps://bucket.s3.amazonaws.com/foo.txt?AWSAccessKeyId = AKIAABCDEFGHIJK& Expires = 1508608760 & Signature = xxxxxxxxxxx
过期以UTC显示时间。
$ date -d @1508608760
Sat Oct 21 17:59:20 UTC 2017
您可以提取值并将其与UTC [time()
]中的当前时间进行比较,然后决定是否重新生成。
HTT PS://s3.amazonaws.com/bucket/foo.txt X-AMZ-算法= AWS4-HMAC-SHA256&安培; X-AMZ-过期= 3600&安培; X-AMZ-凭证= AKIAJRZXXXXXXXXus - 东 - 1%2Fs3%2Faws4_request&安培; X-AMZ-SignedHeaders =宿主安培;的 X-AMZ-日期= 20171021T190750Z 强>&安培; X- AMZ-签名= 8b84ae9b59e9f8a8d7066ecc39e797c8dc29848abcdef61717
X-Amz-Date 以ISO 8601格式提供UTC时间。
您可以提取值,将其转换为纪元/ UTC并将其与UTC [time()]中的当前时间进行比较,然后决定是否重新生成。
答案 1 :(得分:0)
如果您使用Memcached(或类似方法),则可以选择以相同的到期时间将预签名的url推送到Memcached中。 像这样的东西(伪php代码):
$mc->set($your_key, $url, $expiration);
因此,您可以使用
获取网址$url = $mc->get($your_key);
如果$ mc-> get返回false,则必须重新生成预签名的url。
答案 2 :(得分:0)
在macOS上,使用date -r 1535416265
。