Почему браузер запрашивает файл, хотя Apache mod_expires включен?

Я действительно смущен всем этим кешированием. Я пытаюсь настроить mod_expires уменьшить количество HTTP Requests с моего сайта на сервер.

Я хорошо до сих пор, я установил mod_expires и написал небольшой файл.conf из инструкций на http://httpd.apache.org/docs/2.0/mod/mod_expires.html.

Теперь, например, все мои .png, .gif, .jpeg файлы имеют Cache-Control заголовок. Мой ожидаемый результат состоял в том, что браузер не будет делать никаких GET Request в течение периода времени (дано из Cache-Control значение). Но это так, каждый файл запускает запрос и получает HTTP 304 not Modified,

Это неправильное поведение, не так ли? Это должно загрузить эти файлы из внутреннего кэша. Я не понимаю, что браузер отправляет Response header: Cache-Control: max-age=0, Должно ли это быть так?

Вот полный пример Request + Response headers для одного .png file:

Запрос

Host             dev-mgg.localdomain
User-Agent     Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.8) Gecko/20100722     Firefox/3.6.8
Accept         image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language  de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding  gzip,deflate
Accept-Charset   ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive     115
Connection     keep-alive
Referer       http://dev-mgg.localdomain/css/global/icons.css?18224
Cookie         IR_SQLPwdStore=; IR_SQLUser=sysadm
If-Modified-Since   Thu, 24 Jul 2008 06:24:11 GMT
If-None-Match   "4010127-3c4-452bf1aefd8c0"
Cache-Control   max-age=0

отклик

Date         Mon, 02 Aug 2010 14:00:28 GMT
Server     Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_perl/2.0.4     Perl/v5.10.0
Connection   Keep-Alive
Keep-Alive   timeout=15, max=59
Etag         "4010127-3c4-452bf1aefd8c0"
Expires   Mon, 02 Aug 2010 14:04:28 GMT
Cache-Control   max-age=240

1 ответ

Решение

Похоже, что заголовок Expires, отправляемый сервером обратно, займет всего 4 минуты в будущем. Алгоритм, с помощью которого веб-браузеры решают, действительно ли делать запрос (на основе значений Expires), использует "близость" текущего времени к дате истечения срока действия - так, если только срок действия истечения еще не истек (недели, месяцы), лет), вы можете быть уверены, что браузер сделает запрос на файл.

Другие вопросы по тегам