expires

Sergey Shepelev temotor на gmail.com
Чт Авг 19 21:39:44 MSD 2010


>>> Здравствуйте.
>>>
>>> В конфиге nginx имеется:
>>> location ~ /img/ {
>>>   expires 10d;
>>> }
>>>
>>> вот заголовки ответа для одной из картинок:
>>> Server  nginx
>>> Date    Thu, 19 Aug 2010 16:04:58 GMT
>>> Content-Type    image/gif
>>> Connection      keep-alive
>>> Content-Length  2332
>>> Last-Modified   Tue, 11 May 2010 07:03:16 GMT
>>> Expires Sun, 29 Aug 2010 16:05:17 GMT
>>> Cache-Control   max-age=864000
>>> Accept-Ranges   bytes
>>>
>>>
>>> при  повторном  запросе  к  странице  -  опять  идет  обращение к этой
>>> картинке, то есть полностью игнорируются заголовки Expires и Cache-Control
>>>
>>> Это браузеры тупят или я что-то не догоняю?
>>>
>>> Я так думаю что эти картинки должны браться из кэша браузера и запроса
>>> не   должно   быть   к   серверу.   Если   я   не   прав  -  объясните
>>> пожалуйста в чем тут проблема.
>>>
>
>> В лучшем случае, да, вообще без запроса.
>> Чуть менее (но всё же) приятный вариант: GET + If-Not-Modified и ответ 304.
>
>> Какое обращение опять идёт? Покажите запрос или дайте урл страницы где
>> эта картинка используется. А то может у вас в запросе cache-control:
>> max-age=0
>
> Например такой запрос:
>
> http://vpotoke.com/ru/img/arrowRed.gif

Это не запрос, а урл картинки. Вы привели заголовки ответа выше.
Посмотрите на заголовки запроса тоже. Послушайте трафик, есть ли эти
запросы в сети на самом деле, или браузер показывает информацию из
кеша.

>
> а насчет  cache-control: max-age=0 я же привел заголовки ответа выше: Cache-Control   max-age=864000
>

Cache-control бывает и в запросе тоже. И если там есть max-age=0,
значит браузер явно говорит промежуточным проксям, что нужна именно
свежая версия ресурса. Обычно это бывает при Ctrl+F5 (в разных
браузерах разные клавиши для "жёсткого рефреша").

Хром показывает что каждый раз загружает картинки с max-age=0 (то есть
заново качает) при простых переходах на другие страницы, что плохо. Но
заголовок Date во всех ответах одинаковый, то есть, видимо, он таким
образом показывает информацию из кэша. Скорее всего, вы наблюдаете
такой же эффект.

Разные аудиторы (pagespeed, chrome dev tools,
http://code.google.com/speed/tools.html конец страницы) показывают,
что с картинками всё в порядке, только время кэширования советуют
увеличить, так что я бы не волновался на этот счёт.


Подробная информация о списке рассылки nginx-ru