Прочитав много статей и несколько вопросов здесь, мне наконец удалось активировать Apache mod_expires
, чтобы сообщить Браузер ДОЛЖЕН кэшировать изображения на 1 год.
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header append Cache-Control "public"
И, к счастью, ответы сервера кажутся правильными:
HTTP/1.1 200 OK
Date: Fri, 06 Apr 2012 19:25:30 GMT
Server: Apache
Last-Modified: Tue, 26 Jul 2011 18:50:14 GMT
Accept-Ranges: bytes
Content-Length: 24884
Cache-Control: max-age=31536000, public
Expires: Sat, 06 Apr 2013 19:25:30 GMT
Connection: close
Content-Type: image/jpeg
Ну, я думал, что это остановит загрузку браузера и даже запросит сервер об изображениях на 1 год. Но это частично верно: причина , если вы закрываете и снова открываете браузер, браузер больше НЕ загружает изображенияс сервера, но браузер по-прежнему запрашивает у сервера HTTP-запрос для каждого изображения.
Как заставить браузер прекратить отправлять HTTP-запросы для каждого изображения? Даже если эти HTTP-запросы не сопровождаются загрузкой изображения, они все равно являются запросами к серверу, которые излишне увеличивают задержку и замедляют рендеринг страницы!
Я уже сказал браузеру, что он ДОЛЖЕН хранить изображения в кеше в течение 1 года! Почему браузер по-прежнему запрашивает сервер для каждого изображения (даже если он не загружает изображение)?!
Глядя на сетевые графики в FireBug (меню FireBug > Сеть > Изображения), я вижу различное поведение кэширования (очевидно, я начал с полностью пустого кеша браузера, я принудительно удалил кеш в браузере, используя «Очистить всю историю»):
Когда страница загружается в первый раз, загружаются все изображения(то же самое происходит, если я принудительно перезагружаю страницу, нажимая кнопку перезагрузки страницы в браузере). В этом есть смысл!
Когда я перемещаюсь по сайту и возвращаюсь на ту же страницу, изображения вообще не загружаются, и браузер даже НЕ запрашивает у серверакакие-либо изображения. Это имеет смысл (и я хотел бы видеть такое же поведение, когда браузер закрыт)!
Когда я закрываю браузер и снова открываю его на той же странице, глупый браузер все равно делает HTTP-запрос к серверу один раз для каждого изображения: он НЕ загружает изображение, но все равно делает HTTP-запрос, это похоже на браузер запрашивает у сервера изображение(сервер отвечает 200 OK).Вот это меня раздражает!
Я также прикрепляю графики ниже, если вам интересно:
РЕДАКТИРОВАТЬ: только что протестировано также с FireFox 11.0, просто чтобы убедиться, что это не проблема того, что мой FireFox 3.6 слишком устарел. Тоже самое бывает!!! Я также проверил сайт Google и сайт Stackoverflow, они оба отправляют Cache-Control: max-age=...
, но браузер по-прежнему отправляет HTTP-запрос к server для каждого изображения, как только браузер закрывается и снова открывается на той же странице, после ответа сервера браузер НЕ загружает изображение (как я объяснил выше), но все равно делает чертов запрос, который увеличивает время просмотра страницы.
EDIT2: и удаление заголовка Last-Modified
, как предлагается здесь, не решает проблему, это не имеет никакого значения.