Изо всех сил пытаясь найти ответ, я рассмотрел другие подобные вопросы здесь по поводу переполнения стека, но эти решения не сработали.
Я установил маршрут для отображения изображения. Он в основном пытается получить URL из моего пространства digitalocean (S3 bucket), а затем отображает его. Проблема заключается в том, что браузер не знает, что нужно использовать кэшированную копию, даже если были установлены правильные заголовки кэша.
Вот фрагмент кода, который «передает» файл:
$disk = 'do_spaces';
$url = Storage::disk($disk)->url($directory.'/'.$fileName);
$secondsToCache = 86400;
$ts = gmdate("D, d M Y H:i:s", time() + $secondsToCache) . " GMT";
$lm = gmdate("D, d M Y H:i:s", time()) . " GMT";
return response()->stream(function () use ($url) {
return readfile($url);
},200, [
//'status' => 304,
'Content-Type' => $mimeType,
'Pragma' => 'cache', //cache or no-cache
'Expires' => $ts, //set expiration date
'Last-Modified' => $lm,
'Cache-Control' => 'max-age='.$secondsToCache //"no-cache, must-revalidate, no-store, max-age=0, private",
]);
Всякий раз, когда я получаю прямой доступ к изображению, оно использует кэшированную копию при refre sh. Когда я получаю доступ к своему маршруту (изображение через php), он НЕ кешируется.
Я пытался проверить $_SERVER['HTTP_IF_MODIFIED_SINCE']
, но когда я печатаю доступные переменные $ _SERVER, он никогда не появляется, поэтому я не могу просто отправьте ответ 304, чтобы сообщить браузеру использовать кэшированную копию.
Почему бы мне просто не дать прямую ссылку на изображение? В основном потому, что я хочу, чтобы URL-адреса изображений были направлены на мой сайт, а не URL-адреса digitalocean (конечно, если использование php для доставки изображений создает слишком много накладных расходов, я могу переключиться на прямые URL-адреса, но для меня это последнее средство).
Ценю любые идеи или предложения, спасибо!