Браузер не кэширует сгенерированные изображения - PullRequest
1 голос
/ 11 января 2012

Похоже, что во время некоторых тестов Firefox не будет кэшировать изображения, которые генерируются динамически (или загружаются со стороны сервера кэша).

demonstration1 demonstration2

Я попытался включить кэшированиеиспользуя заголовки:

$expires = 60*60*24*14;
header("Pragma: public");
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');

Но безрезультатно.Я все еще получаю «200 OK» вместо «304 Not Modified».

В поисках ответа с помощью поиска в Stackoverflow я обнаружил подсказку кого-то, что они скорее переместят браузер на изображение напрямую.

Как:

header("Location: /img/generated/whatever.png");

Мне не нравится подход, потому что он вызывает два запроса.

Может ли кто-нибудь помочь мне и сообщить, как я могу просто заставить браузер кэшировать эти файлы?

URL-адрес запроса не изменяется и не содержит начальных значений или временных меток.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Здесь вам не хватает последнего измененного заголовка в вашем заголовке ответа.напр. Last-Modified:Wed, 15 Feb 2012 10:07:48 GMT.Вы можете решить эту проблему, используя эту строку со своими заголовками.

    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

Причина, по которой вы должны это сделать, потому что браузер использует последний модифицированный заголовок для сравнения, если файл не изменен, поэтому нет необходимости повторно загружатьфайл.:

0 голосов
/ 11 января 2012

Вы можете попробовать другой способ.Если вы не хотите перемещать свой браузер.Вы можете переписать свой URL, используя .htacess или / и mod_rewrite или другие зависимые от веб-сервера модули.Например, следующий URL:

http://sub.domain.com/img/gen/<param>/.../<paramN>/image.png 

будет переадресован (без перенаправления на стороне клиента) в ваш скрипт, имеющий значения параметров в URL.Это означает, что у вас будет только один запрос.

Примеры таких действий можно найти здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...