Помогите разобраться с путаницей на тему кеша, голову сломал уже. Проблема вкратце: Паранойя на тему, что картинки кажется плохо кешируются. Складывается порой ощущение, что через день другой кеш протухает, хочется чтобы они закешировались намертво если не было перезаписи файла картинке на уровне ФС.
Мысли: Парсер стоит у хостера на shared-хостинге как cgi-скрипт, стоит Apache 1.3.x По идее, вебсервер сам формирует заголовки ответа для статических файлов (картинок) и сам следит за актуальностью файлов на ФС. В парсере никаких специальных, отключающих кеш заголовков не определено у меня.
Заголовки после первого запроса по нажатию Reload:
Ответ index.html - 200 OK ------------------------------------ Date Sun, 29 Aug 2010 12:08:03 GMT Server Apache/1.3.41 (Unix) PHP/5.2.9 Set-Cookie sess=none; expires=Sat, 27 Nov 2010 12:08:03 GMT; path=/ Content-Length 10796 Connection close Content-Type text/html; charset=WINDOWS-1251 ------------------------------------
Запрос картинки на этой же странице ------------------------------------------ Host xxxxxx.ru User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 Accept image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language ru,en-us;q=0.7,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Cookie sess=none If-Modified-Since Sat, 21 Aug 2010 12:44:57 GMT If-None-Match "39493c-21c0e-4c6fca49" Cache-Control max-age=0 ------------------------------------------
Ответ сервера на картинку - 304 Not Modified --------------------------------------------- Date Sun, 29 Aug 2010 12:08:05 GMT Server Apache/1.3.41 (Unix) PHP/5.2.9 Connection close Etag "39493c-21c0e-4c6fca49" ---------------------------------------------
На вид как бы все ок, но ощущение, что кеш картинок "протухает" постоянно, в браузере специальное "не_хранение_кеша" не ставилось и вообще не менялось с default'ового (может конечно дисковую квоту кеша превышаю активным серфингом )
На самом деле паники нет, но что не понимаю: Могут ли влиять на кеш самих картинок: а) кеш-meta-теги index.html в которой эти картинки указаны b) http-заголовки ответа index.html - и может нужно для пущей верности что-то дописать туда из Парсера? c) Туплю я - так и должно быть это нормально все и так отдается верно.
Вообще попахивает ответом c) но вот не дают покоя a) и b)
ну... вы вообще-то не выдали никаких инструкцию браузеру для кеширования изображений. вот он (браузер) и пользуется тем, что у него указано по умолчанию (у меня, например -- 5 часов).
выдайте необходимые заголовки -- будет вам счастье. вам в помощь.
P.S. но вообще "намёртво" они не будут кешироваться. я браузеру разрешил использовать под кеш 50 МБ. думаете он туда 100 картинок положит и всё?
При первом обращении: Браузер Host xxxxxx.ru User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 Accept image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language ru,en-us;q=0.7,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Referer Cookie sess=none; mannewslist-acfilter=n; frmsyspars-acfilter=n; mnhelplist-acfilter=n
ВебСервер: Date Sun, 29 Aug 2010 12:39:15 GMT Server Apache/1.3.41 (Unix) PHP/5.2.9 Last-Modified Sat, 21 Aug 2010 12:44:57 GMT Etag "39493c-21c0e-4c6fca49" Accept-Ranges bytes Content-Length 138254 Connection close Content-Type image/png ------------------- Сервер сообщает, что картинка не менялась с 21 числа (сегодня 29) то есть кеш актуален как бы говорится браузеру
----------------------------------- При втором обращении тут же ------------------------------------ Браузер: Host xxxxxxx.ru User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 Accept image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language ru,en-us;q=0.7,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Referer Cookie sess=none; mannewslist-acfilter=n; frmsyspars-acfilter=n; mnhelplist-acfilter=n If-Modified-Since Sat, 21 Aug 2010 12:44:57 GMT If-None-Match "39493c-21c0e-4c6fca49" Cache-Control max-age=0
ВебСервер: 304 NotModified Date Sun, 29 Aug 2010 12:42:11 GMT Server Apache/1.3.41 (Unix) PHP/5.2.9 Connection close Etag "39493c-21c0e-4c6fca49"
P.S.: При первой загрузке браузеру же сказали, что Last-Modified Sat, 21 Aug 2010 12:44:57 GMT и при втором релоаде браузер послал If-Modified-Since Sat, 21 Aug 2010 12:44:57 GMT на что получил не тело картинки а 304 Not Modified значит, что картинка не была загружена, а была взята из кеша. Вопрос конечно в том, что такое поведение отдано на откуп браузера, вы же говорите, что надо явно указать о кешировании. И еще вопрос был про кеш-meta-теги могут ли они повлиять?
Проанализировал ответ вебсервера www.parser.ru - тоже самое
Первое обращение к Запрос Host www.parser.ru User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 Accept image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language ru,en-us;q=0.7,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Referer Cookie cookie=on; auth.uid=xxxxxxxxx
Ответ Date Sun, 29 Aug 2010 12:49:24 GMT Server Apache/1.3.37 (Unix) Last-Modified Thu, 11 Apr 2002 15:35:24 GMT Etag "9643a5-52d-3cb5ad3c" Accept-Ranges bytes Content-Length 1325 Connection close Content-Type image/gif --------- P.S: что-то не видать специальных заголовком про кеш у вас. Та же Last-Modified что и у меня только младше что естественно
Похоже тот mod_expires только Last-Modified-ом и рулит
Похоже что директивами для mod_expires мы как бы рулим заголовками Last-Modified и если надо mod_expires будет просто периодически сам перекрывать эти значения вне зависимости от измненения файлов на ФС. То есть сказали Every 5 hours - то и будет через 5 часов менять Last-Modified наверное...
а с чего ей быть, если и вы не управляете кэшированием изображений и мы?
- мета-теги влиять на кеширование изображений не должны, т.к. они к документу относятся. так-же к изображениям не относятся http заголовки html страницы.
- протухнет картинка (это браузер или его пользователь решает когда ей протухнуть) -- пойдёт запрос без If.
- я говорю, что если сказать браузеру о параметрах кеширования конкретной картинке, то он _может_ (но _не_обязан_) использовать эту информацию, а не введённый в настройках default.
- вы не поверите, но last-modified с expires на кеширование в общем и влияют.
P.S. вот чесное слово -- я не понимаю вашей проблемы.