Сделано в Раскрутке

Архив эхоконференции RU.PHP

- RU.PHP ------------------------------------------------------------- RU.PHP -
 Msg  : #9061 [872]
 От   : Mithgol the Webmaster         2:6023/802.24       21 июня 04, 09:07
 Кому : Askold Volkov                                     23 июня 04, 23:35
 Тема : Слово о методе, позволяющем PHP-странице закэшироваться
-------------------------------------------------------------------------------
Так было 07:07 21 Jun 04 написано от Askold Volkov к Mithgol the Webmaster:

 MtW>> Сегодня, немного почесав себе репу, я наковырял в manuaле способ
 MtW>> изменить код HTTP-отклика вебсервера, не извращая заголовок Expires
 MtW>> (и, собственно говоря, вообще не трогая заголовок Expires).

 MtW>>       header("HTTP/1.x 304 Not Modified");

 AV> Этот способ, конечно, работает. Hо в моем случае в ответе стояла именно та
 AV> версия протокола, которая реально используется при связи, а не непонятная
 AV> HTTP/1.x. Может это и все равно, но... кто его знает.

О да! Спасибо за верное и дельное замечание. Конечно, это моя недоработка --
следовало бы писать header($_SERVER["SERVER_PROTOCOL"] . " 304 Not Modified"); 
так я и поступлю теперь.

 MtW>>    include($_SERVER["DOCUMENT_ROOT"] . "/путь/от/корня/cache-it.mtw");

 MtW>> то этот PHP-файл (а точнее говоря -- результат его работы)
 MtW>> гарантированно засунется в кэш браузера примерно таким же манером, как
 MtW>> туда засовывается обычная HTML-вебстраница. Без expires-заголовка,
 MtW>> потому что и обычные страницы его не имеют ведь!

 AV> Дык вот именно, что "таким же манером, как туда засовывается обычная
 AV> HTML-вебстраница". А она тоже засовывается туда отнюдь не гарантированно.
 AV> Т.е. в твоей любимой мазиле может и гарантированно, но 90% населения
 AV> пользуется отнюдь не мазилой. А в IE поведение кэша весьма непредсказуемо
 AV> и загадочно. И экспериментальный факт состоит в том, что наличие expires
 AV> повышает вероятность попадания в кэш.

Каким образом я могу повторить твой эксперимент? С файерфоксом всё было ясно:
модуль Live HTTP Headers прекрасно справлялся с задачкой демонстрации заголовка
HTTP-запроса и HTTP-отклика. А с MSIE как быть?

 AV> Да и в любом случае даже при попадании в кэш есть еще альтернатива -
 AV> запрашивать if-modified-since или тихонько взять из кэша ничего не
 AV> запрашивая, а это уж точно управляется expires.

Правильно. Hо штука в том, что прямо сейчас лично я рассматриваю тот случай,
когда программы PHP используются как более быстрый способ написания обычной
вебстраницы, то есть для определения крупных блоков разметки с автоматической
подстановкою изменяющихся частей из аргументов функции. А в этом случае, как и 
для обычной страницы, сложно определить, when it _expires_. Может, я её щазз
через пять минут поменяю. А может, она там месяц пролежит. Мне нужен именно
механизм корректного отклика на if-modified-since; а вот если его недостаточно,
тогда буду думать.

Я сейчас поставил эксперимент над Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1) и получил любопытный результат: после применения cache-it.mtw моя страница
застряла в кэше настолько надёжно, что если в файл cache-it.mtw что-то вписать 
(не трогая дату модификации основного скрипта), то по обычному Reload будет
показываться прежняя версия, а по Shift+Reload -- версия со вписанным кодом.
Парадокс в том, что и _после_ Shift+Reload, если нажать простой Reload, то
вписанный код убирается со страницы -- то есть прежняя версия _всё_ _ещё_
находится в кэше у MSIE! Версия MSIE 6 с установленным SP 1, плюс пять штук
обновлений (Q813489, Q328389, Q330994, Q828750, Q832894).

То есть всё работает как ожидалось -- даже, гм, едва ли не слишком хорошо.

А какие экспериментальные факты свидетельствуют обратное?


Ceterum censeo Diptaunum esse delendam!                  http://mithgol.pp.ru/
Mithgol the Webmaster.  [Team В эхолисте ,,ё`` уместим]  [Team А я меняю subj]

... Иванушка! Hе пей из следов кобольдова копытца - хаотиком станешь!.. [ADoM]
--- Знаешь ли ты, Askold, что "наделённый" пишется через "ё"?
 * Origin: Заменяем чипы RAM на ROM заземлённым острым топором (2:6023/802.24)


При переходе по баннеру - скидка 25% на первый месяц обслуживания!
Самый простой способ получить ROOT-доступ
При переходе по баннеру - скидка 25% на первый месяц обслуживания!