Кэширование gzipped css

На victory:​ ​ ​

9
задан askon 25 July 2009 в 18:41
поделиться

2 ответа

Попробуйте добавить это к набору заголовков: -

$offset = 60 * 60 * 24;
header('Content-type: text/css');
header('Cache-Control: max-age=' . $offset);
header('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT');
header('Last-Modified: ' . gmdate ("D, d M Y H:i:s", time()) . ' GMT');

Проблема заключалась в инструкции must-revalidate в заголовке управления кешем. Это приведет к тому, что клиент будет повторно запрашивать css каждый раз, когда это необходимо, и ваш код не обрабатывает заголовок If-Modified-Since и отправку кода состояния ответа 304 Unmodified.

Вышеупомянутый подход уменьшает кеш период до 1 дня и устраняет обязательную повторную валидацию. Он также добавляет заголовок Last-Modified (кеш может не кэшировать элемент, если заголовок Last-Modified или ETag отсутствует).

Чтобы улучшить это, вы можете найти фактическое время последнего изменения файла css, которым вы являетесь сжатие и отправьте это как заголовок Last-Modified. Вы можете включить в свой код сравнение заголовка запроса If-Modified-Since со значением времени последнего изменения файлов css. Если вы обнаружите, что они такие же, отправьте этот набор заголовков, но также отправьте статус 304 Unmodfied и не отправляйте тело вообще. (Я на самом деле не специалист по PHP, поэтому оставлю это экспертам PHP, чтобы они поместили его в другой ответ.)

Сделайте реалистичную оценку того, как долго вы хотите, чтобы клиент кэшировал CSS, прежде чем он должен будет сделать еще одну попытку чтобы получить его и соответственно установить значение максимального возраста.

8
ответ дан 4 December 2019 в 23:40
поделиться

Если вы читаете python / django, вы можете прочитать код для компрессора django . Он помещает несколько файлов CSS в один. Часть CSS выглядит так, как будто она запускает CSSTidy для очистки CSS.

-2
ответ дан 4 December 2019 в 23:40
поделиться