Автор Тема: Кеширование картинок, генерируемых скриптом  (Прочитано 2929 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Есть скрипт, который отдает картинки пользователю так: pictures.php?id=13
Вопрос прост:
Какой ещё хидер посылать, кроме "Content-Type: image/jpeg", чтобы такая картинка нормально кешировалась проксями и, главное, пользовательскими браузерами?
Пробовал "Cache-Control: public", "Expires: " . gmdate("D, d M Y H:i:s", time() + 999999999) . " GMT".
Пробовал даже так:

Header
("Cache-Control: public, must-revalidate");
Header("Vary: Content-ID");
Header("Content-ID: ".md5($raw_jpeg_data));

Не получается вообще никак!
Короче перепробовал всё, о чем написано тут и в ссылках в конце этой статьи.
Тестировал на Опере 7.10, потому что ИЕ браузером можно назвать только с натяжкой :)
(для сторонников осликов: скрипт пишу в первую очередь для себя, поэтому и поддержку Оперы хочу обеспечить стопроцентную. Тем более, имхо если с Оперой всё будет ОК, то с ИЕ - и подавно!)
Кстати, в File\\Preferences\\History and Cache галочку Always check redirect напротив Check images убрал, а сам Check images поставил на Never уже давно - всё равно не помогает :(
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Кеширование картинок, генерируемых скриптом
« Ответ #1 : 20 Апреля 2003, 00:37:49 »
открой телнет, и напиши руками GET-запрос на какую-нибудь существующую картинку
•••Jah\'d never let us down!•••

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Кеширование картинок, генерируемых скриптом
« Ответ #2 : 20 Апреля 2003, 00:47:25 »
Спасибо, сейчас попробую.
Хотя кажется мне, что всё не так просто, потому что браузер видет, что запрос идет на файл php, а не jpg, и сознательно его не хочет кешировать :(
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Кеширование картинок, генерируемых скриптом
« Ответ #3 : 20 Апреля 2003, 00:48:57 »
хз
HTTP/1.1 200 OK
Date: Sat, 19 Apr 2003 20:48:03 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.0 FrontPage/5.0.2.2623 mod_ssl/2.8.11 OpenSSL/0.9.6g rus/PL30.16
Last-Modified: Fri, 11 Jan 2002 20:19:46 GMT
ETag: "2d6ab6-139-3c3f48e2"
Accept-Ranges: bytes
Content-Length: 313
Content-Type: image/gif

GIF89a?
       AИИИИИИИИИИИИAAAyyyyNETSCAPE2.0??!u?
                                           ,?
                                             ????9?д@YЧuUаOЕ?~ЫEqe?!?{This anima
ted GIF file was constructed using Ulead GIF Animator, visit us at http://www.ul
ead.com to find out more.?USSPCMT!PIANYGIF2.0.a2.gif?D:\\web\\spectator\\webscript\\
img\\a2.gif??;

Можешь попробовать эти заголовки, вдруг поможет.
•••Jah\'d never let us down!•••

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Кеширование картинок, генерируемых скриптом
« Ответ #4 : 20 Апреля 2003, 00:52:29 »
Вот сейчас полезу в RFC читать про ETag... просто сначала думал, что он здесь ни при чем.
Потом отпишу сюда, что получилось.
Ещё раз спасибо!
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Кеширование картинок, генерируемых скриптом
« Ответ #5 : 20 Апреля 2003, 02:07:58 »
Так, вроде разобрался.
ETag вроде как ни при чем, но на всякий случай покажу, как я его генерю:
Header("ETag: ".md5($raw_jpeg_data));
Знаю, что не правильно, но ничего не могу поделать ;)
А теперь к сути:
Вся загвоздка была в хидере "Cache-Control: max-age=XXXXX".
Я поставил Header("Cache-Control: max-age=86400"); и всё стало работать отлично... во всяком случае до конца этих 86400 секунд :)
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28