Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Честно сказать никогда не любил кэш картинок и другого сожержимого сайта но тут возникла проблема и я не зная как решить ее напрямую
Имеется PHP-скрипт который получает ID картинки запрашивает из базы ее mime-тип и двоичное содержимое и выводит ее предварив соответствующим заголовком
Мне нужно чтобы всего навсего браузер не кэшировал эту картинку и каждый раз загружал ее заново - пробовал ставить и pragma и дату обновленая файла - но все равно грузится старая
Я конечно много вариантов walkaroundов на стороне страницы которая запрашивает эту картинку - напрмер вызывать ее с параметром типа &rnd=rand_num где rand_num случайно сгернерированное число или другие JS-хитростями - оно то конечно работает
Но меня интересует как именно сделать так чтобы браузер сам по факту приняв картинку (Напрмер если бы я просто ввел URL картинки в адресной строке) качал ее заново
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
EuGen
Отправлено: 27 Августа, 2009 - 22:23:12
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Вообще говоря, от браузера тоже есть зависимость. Если в нем стоит уровень "никогда не запрашивать обновленную страницу с сервера" (или как там оно называется, скажем, в IE), то он всегда будет загружать со своего локального кэша.
В моей практике также были случаи, когда промежуточный кэширующий прокси сводил на нет все усилия программиста с серверной стороны. (Особенно плохо, если не знать о существовании оного)
Ну а вообще, с отдачей картинки скриптом никаких трудностей у меня скажем никогда не было (как пример, рисунок для CAPTCHA - всегда создается новый просто по нажатию F5). Так что "напрямую", как Вы выразились, все должно работать корректно.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
JustUserR
Отправлено: 28 Августа, 2009 - 11:43:03
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
EuGen Спасибо за информацию но я позволю себе уточнить некоторый момент
Итак у нас есть PHP-скрипт генерирующий картинку (Пускай картинка будет почти всегда разная - типа капчи) и чтобы получить картинку надо запросить адрес типа http://mysite[dot]ru/img.php?img=10 (Несмотря на то что число 10 скажем постоянное но при этом картинка выдаваемая по такому запросу может быть совершенно разная - это важно)
Если я ввожу в строку браузера этот адрес и жму F5 то все отлично работает и рисуются разные картинки
Но вот беда - если создать страницу и сделать на этой странице <img src="http://mysite.ru/img.php?img=10"> то эта картинка закачается один раз и никогда не обновится - единственно возможное обновление это средствами JS
Я был уверен что браузеры не настолько вредные - я думал что если вывести заголовок Last-Modified текущее время и устанровить pragma no-cache то никто не будет кеэировать - а тут хрен
Цитата:
В моей практике также были случаи, когда промежуточный кэширующий прокси сводил на нет все усилия программиста с серверной стороны. (Особенно плохо, если не знать о существовании оного)
Остается надеяться только на это потому чо действительно гдето может висеть такая кэширущая прокси
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
valenok
Отправлено: 28 Августа, 2009 - 17:49:53
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
EuGen
Отправлено: 28 Августа, 2009 - 20:39:07
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
У Вас на сервере также может стоять неверно настроенный nginx - кэширующий подобную "статику".
Нужно смотреть логи всех демонов - nginx (если есть), apache. Поставьте также Firebug (для Mozilla Firefox, если используете), и смотрите ответы сервера (по-моему, в разделе "Сеть" - "Net")
Ну и проверьте, нет ли кэширующего прокси. Такое бывает.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
JustUserR
Отправлено: 29 Августа, 2009 - 20:48:57
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
EuGen Кстати спасибо за мысль - я пользуюсь IE и решил попробовать для проверки Proximion чтобы посмотреть какие в действительности запросы идут - и как ни странно ни GET и HEAD (Для проверки даты обновления к примеру) запросов на "картинку" вообще не идет На сервере Apache в логах тоже не видать запросов на "картинку" с моего IP
Честно сказать пока так и не понял почему так происходит и оставил свой JS-код для обновление картинки
Буду выяснять дальше - если появятся интересные подробности обящательно расскажу
Всем спасибо за помощь
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
EuGen
Отправлено: 29 Августа, 2009 - 23:20:00
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Если у Вас в логах нет обращений на сервер за картинкой, то, значит, существует некий промежуточный кэш (возможно, и Ваш локальный), который отдает картинку "вместо сервера".
Насчет прокси - если он не прозрачный, попробуйте сделать traceroute (для MS Win аналогом служит tracert), можете увидеть этот узел. Но только если он действительно не прозрачный.
Если же прозрачный, помочь может ping. Сравнивая TTL (Time to live) пакетов из разных сегментов сети, можно обнаружить подобный узел. При этом, правда, потребуется иметь доступ к различным сегментам одной и той же сети.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.