кэширование ресурсов страницы - PullRequest
0 голосов
/ 10 февраля 2012

В целях сокращения HTTP-запросов на ресурсы пользовательского интерфейса (JS / CSS) я написал PHP-скрипт для объединения этих файлов и предлагал его как: "assets / basic, login, jquery-ui-10.css" иэто работает нормально, но я решил немного углубиться и попросить браузер кэшировать эти Combiner-ресурсы (как я их называю), добавив заголовок expire в скрипт PHP.Конечно, здесь я использую функциональность htacess RewriteRule для ссылки на этот сценарий assets.php? Files = basic, login, jquery-ui & type = css & version = 10 на приведенный выше, чтобы он выглядел как CSS-файл для браузера, чтобы кэшироватьэто (и это выглядит хорошо так :)).Я также использую параметр «версия», чтобы заставить браузер обновлять файл, но этого не происходит !! Я добавил эту информацию заголовка для кэширования файла:

    header("HTTP/1.1 304 Not Modified");
    header("Expires: Sat, 1 Jun 2015 12:00:00 GMT");
    header("Cache-Control: must-revalidate");

Еще, когда я пытаюсь изменитьпараметр версии в строке URL выше не загружает новое содержимое файла, хотя имя файла изменяется> для браузера

Что я здесь не так делаю, как заставить браузер повторно загрузитьновый файл> с другим именем (но все равно отправляющий вышеуказанные заголовки)

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Как говорит Квентин, вы ДОЛЖНЫ послать ответ 304 только в ответ на запрос IF-Modified-Since ИЛИ If-None_match. Отправляя ответ 304, вы говорите браузеру использовать кэшированную копию , даже если она не имеет

На практике, использование 304 ответов может фактически победить цель повышения производительности, и обычно лучше игнорировать условный запрос и сделать ответ 200 с содержимым и новыми инструкциями кэширования

Если вы хотите, чтобы содержимое кэшировалось, отправьте max-age, а также заголовок Expires (заголовок expires необходим только для клиентов HTTP / 1.0 - все современные браузеры реализуют HTTP1 / 1 - даже когда вы явно указываете им использовать HTTP / 1.0).

, например

header("Expires: Sat, 1 Jun 2015 12:00:00 GMT");
header("Cache-Control: max-age=94608000,must-revalidate");
1 голос
/ 10 февраля 2012

Вы не можете. Весь смысл «Не изменено» заключается в том, что он сообщает браузеру, что документ совпадает с последней полученной версией, и что он не должен его скачивать.

AFAIK, отправлять его следует только в ответ на запрос If-Modified-Since.

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