2012-02-10 2 views
0

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

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

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

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

Заранее благодарен

ответ

1

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

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

Если вы хотите, чтобы содержание кэшировать затем отправить максимальный возраст, а также как заголовок 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

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

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