webtop
@webtop
Web developer

Как настроить кэширование изображений в PHP и ZF2?

Приветствую!

Проблема следующая:
необходимо заставить браузер кэшировать картинки, которые сервер отдает следующим образом:

$path = ".../data/images/test.jpg";
$imageContent = file_get_contents($path);

$response->setContent($imageContent);
$response->getHeaders()
     ->addHeaderLine('Content-Transfer-Encoding', 'binary')
     ->addHeaderLine('Content-Type', mime_content_type($path))
     ->addHeaderLine('Content-Length', mb_strlen($imageContent));


Запрос:
GET /file-system/preview/67.jpeg HTTP/1.1
Host: portal.dev
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 01 Jul 2015 11:36:42 GMT
If-None-Match: 53161d02e10e6793155b9707c8af4668
Cache-Control: max-age=0
Referer: http://portal.dev/file-system/preview/67.jpeg
Cookie: PHPSESSID=ba792bnrfcqlfp8ubut2smc1j0
Connection: keep-alive


Ответ сервера:
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2015 01:38:00 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.11
Expires: Wed, 12 Aug 2015 01:38:00 GMT
Cache-Control: max-age=2592000, must-revalidate
Pragma: no-cache
Last-Modified: Wed, 01 Jul 2015 11:36:42 GMT
Accept-Ranges: bytes
Etag: 53161d02e10e6793155b9707c8af4668
Content-Transfer-Encoding: binary
Content-Length: 3369
Keep-Alive: timeout=5, max=95
Connection: Keep-Alive
Content-Type: image/jpeg


А когда возвращаю 304, то браузер не отображает картинку.
  • Вопрос задан
  • 481 просмотр
Пригласить эксперта
Ответы на вопрос 1
@jaxel
Проще всего это сделать через .htaaccess

<ifmodule mod_expires.c>
    <filesmatch ".(jpg|jpeg|gif|png|css|js|woff)$">
            ExpiresActive on
            ExpiresDefault "access plus 30 day"
        </filesmatch>
</ifmodule>


mod_expires должен быть установлен и включен
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы