mirror of
https://github.com/getgrav/grav.git
synced 2025-12-05 15:29:57 +01:00
fix range requests for partial content in Utils::downloads() - Fixes #3990
Signed-off-by: Andy Miller <rhuk@mac.com>
This commit is contained in:
@@ -691,6 +691,17 @@ abstract class Utils
|
|||||||
header('Content-Disposition: attachment; filename="' . ($options['download_name'] ?? $file_parts['basename']) . '"');
|
header('Content-Disposition: attachment; filename="' . ($options['download_name'] ?? $file_parts['basename']) . '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($grav['config']->get('system.cache.enabled')) {
|
||||||
|
$expires = $options['expires'] ?? $grav['config']->get('system.pages.expires');
|
||||||
|
if ($expires > 0) {
|
||||||
|
$expires_date = gmdate('D, d M Y H:i:s T', time() + $expires);
|
||||||
|
header('Cache-Control: max-age=' . $expires);
|
||||||
|
header('Expires: ' . $expires_date);
|
||||||
|
header('Pragma: cache');
|
||||||
|
}
|
||||||
|
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', filemtime($file)));
|
||||||
|
}
|
||||||
|
|
||||||
// multipart-download and download resuming support
|
// multipart-download and download resuming support
|
||||||
if (isset($_SERVER['HTTP_RANGE'])) {
|
if (isset($_SERVER['HTTP_RANGE'])) {
|
||||||
[$a, $range] = explode('=', (string) $_SERVER['HTTP_RANGE'], 2);
|
[$a, $range] = explode('=', (string) $_SERVER['HTTP_RANGE'], 2);
|
||||||
@@ -703,7 +714,7 @@ abstract class Utils
|
|||||||
$range_end = (int)$range_end;
|
$range_end = (int)$range_end;
|
||||||
}
|
}
|
||||||
$new_length = $range_end - $range + 1;
|
$new_length = $range_end - $range + 1;
|
||||||
header('HTTP/1.1 206 Partial Content');
|
http_response_code(206);
|
||||||
header("Content-Length: {$new_length}");
|
header("Content-Length: {$new_length}");
|
||||||
header("Content-Range: bytes {$range}-{$range_end}/{$size}");
|
header("Content-Range: bytes {$range}-{$range_end}/{$size}");
|
||||||
} else {
|
} else {
|
||||||
@@ -712,19 +723,10 @@ abstract class Utils
|
|||||||
header('Content-Length: ' . $size);
|
header('Content-Length: ' . $size);
|
||||||
|
|
||||||
if ($grav['config']->get('system.cache.enabled')) {
|
if ($grav['config']->get('system.cache.enabled')) {
|
||||||
$expires = $options['expires'] ?? $grav['config']->get('system.pages.expires');
|
|
||||||
if ($expires > 0) {
|
|
||||||
$expires_date = gmdate('D, d M Y H:i:s T', time() + $expires);
|
|
||||||
header('Cache-Control: max-age=' . $expires);
|
|
||||||
header('Expires: ' . $expires_date);
|
|
||||||
header('Pragma: cache');
|
|
||||||
}
|
|
||||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', filemtime($file)));
|
|
||||||
|
|
||||||
// Return 304 Not Modified if the file is already cached in the browser
|
// Return 304 Not Modified if the file is already cached in the browser
|
||||||
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
|
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
|
||||||
strtotime((string) $_SERVER['HTTP_IF_MODIFIED_SINCE']) >= filemtime($file)) {
|
strtotime((string) $_SERVER['HTTP_IF_MODIFIED_SINCE']) >= filemtime($file)) {
|
||||||
header('HTTP/1.1 304 Not Modified');
|
http_response_code(304);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user