Forum Webscript.Ru
Программирование => PHP => Тема начата: stanlee от 09 Декабря 2004, 18:22:39
-
Гворят что ща уже не обманешь роботов путем
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
типо ни по If-Modified-Since и If-None-Match проверяют
то есть отдают код если дата старая ну и соответственно если новая.
я чет не понял о чем это народ говорил.
может кто нить просветит?
-
к роботам If-Modified-Since не имеет никакого отношения.
это заголовки, отвечающие за кэширование.
И, в общем-то по хорошему, ими надо пользоваться.
если у тебя есть механизм определения даты изменения документа, то ты можешь вместо него отдавать только код Not Modified что повысит скорость работы и понизит загрузку сервера
-
а если у меня динамические страницы - как тут определишь дату изменения документа?
я нашел такой вот код
$theDate = gmdate(\'D, d M Y H:i:s\',filemtime($_SERVER["SCRIPT_FILENAME"])).\' GMT\';
if ($theDate === $_SERVER["HTTP_IF_MODIFIED_SINCE"]){
header("HTTP/1.x 304 Not Modified");
}
header(\'Last-Modified: \'.$theDate);
раньше я пользовался только Last-Modified
он ведь не будет верен для динамических сайтов
или я не прав?
-
Такой код - ЕСТЕСТВЕННО неверен. его писал идиот.
впрочем, одна его глупость компенсирует другую - вреда особого не будет.
но и пользы, как и смысла - в нем нет.
-
а как тогда правильно нужно?
на данный момент я использую только
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
но эт только "врет" что мол документ был изменен сам как таковой
и только а вот как затронуть в динамических! страницах If-Modified-Since - не могу предоложить:)
RomikChef - не подскажешь?
-
сначала объясни - зачем тебе это надо.
-
ну тыж сам писал
повысит скорость работы и понизит загрузку сервера
и
И, в общем-то по хорошему, ими надо пользоваться.
-
не думаю, что пользоваться надо по-хорошему.
вполне можно и обойтись
если бы я озаботился таким вопросом, то технология решения такая.
1. решаем - а у нас вообще страница повторяется когда-нибудь? К примеру - текстовые ушки если есть, то кэшировать нет смысла.
2. если может повторяться, то определяем все источники текстов.
3. для всех источников заводим признак, который учитывает время изменения.
5. при обращении к странице смотрим на время и сравниваем его с пришедшим в иф модифиед. только не так дубово ,конечно, как в примере выше.
В реальности я себе представляю себе это дело так.
конечно же, имеет смысл заморачиваться, только если источник информации на странице один.
например - БД. в бд можно завести поле timestamp которое будет отслеживать изменения.
возьмем, к примеру, форум.
выводится дерево сообщений.
мы можем легко узнать дату самого последнего. и отдать нот модифиед или же саму страницу.
хотя это все - в теории.
в реальности сообщение из форума может быть УДАЛЕНО. то есть - форум измменился, а максимальная дата - нет. То есть надо все равно заводить никий глобальный параметр, который отслеживает ВСЕ изменения. Имхо, овчинка выделки не стоит
-
В реальности, многие динамические блоки (например голосование, ушки, календарь и другие маленькие блоки, которые часто меняются) можно подгружать яваскриптом (причем для этих подгружаемых блоков можно сделать свою проверку If-Modified-Since).
Обычно этих динамических блоков не так много (если это не супер-пупер портал), так что не все так страшно.
К тому же не на все страницы сайта надо(можно) делать такое кеширование