LINUX.ORG.RU

Как заставить FF3 соблюдать стандарты на запрет кеширования страниц?


0

0

Есть страница вида http://xxx/conferences/31941/

Отдаётся с неё динамический контент.

Дата модификации страницы задаётся и она фиксированная.

После некоей операции пользователь может вернуться на эту страницу редиректом или кликом.

Так вот, не смотря на явно прописанные:

<meta name="Pragma" content="no-cache" />
<meta name="Cache-Control" content="no-cache" />
<meta name="Expires" content="Mon, 22 Oct 1973 06:45:00 GMT" />

Фокс грузит старую страницу. При чём в about:cache она нигда не находится.

Что делать?

Замечу, что нужно как-то запретить дефолтовому Фоксу абстрактного клиента заниматься этим, а не мне у себя.

★★★★★

Ответ на: комментарий от anonymous

Нельзя. Поисковики должны знать, что объект не менялся.

KRoN73 ★★★★★
() автор топика

> Фокс грузит старую страницу. При чём в about:cache она нигда не находится. Откуда это известно, если ниже ты пишешь, что объект не менялся? Даже если это действительно так - откуда известно, что фокс тащит из своего кеша, а не из какого-нибудь кривого прокси?

>Что делать?

Смириться с мыслью о том, что клиент серверу ничего не должен..

anonymous
()
Ответ на: комментарий от anonymous

Нормальный клиент стандарты соблюдать должен.

Не может - отстойный клиент.

(Не очень толсто вышло?)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> Не может - отстойный клиент.

Никто и не спорит что FF - отстойный клиент. Поэтому и не пользуемся.

anonymous
()
Ответ на: комментарий от anonymous

К сожалению, среди массы простых юзеров им сегодня пользуются многие. И нужно что-то придумать на счёт кеширования.

KRoN73 ★★★★★
() автор топика

>Фокс грузит старую страницу. При чём в about:cache она нигда не находится.

А это точно проделки лисы? Поиском в ~/.mozilla/firefox-3.0/ по содержимому страницы находится?

wfrr ★★☆
()

Отписать на багзиллу и ждать выхода патча и/или разъяснений, а тем временем проверять user-agent и генерить специфичные workaround?

alexsaa
()
Ответ на: комментарий от wfrr

>А это точно проделки лисы?

Проксей по дороге нет, соединение прямое.

>Поиском в ~/.mozilla/firefox-3.0/ по содержимому страницы находится?

Находится в places.sqlite и в Cache/ в нескольких файлах.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от wfrr

>Не отдавать фоксу дату модификации. а остальным отдавать

Ну... Наверное, метод.

...

Я, правда, по-другому обхожу сейчас. Делаю страницы голой натуральной статикой, а переменную часть контента сую через JavaScript. И уже этот скрипт - и некешируемый, и с GET-частью в адресе, и без даты модификации... Хотя, надо ещё проверить. С Фокса станется и его закешировать :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от wfrr

> Не отдавать фоксу дату модификации

Почему все считают, что "Expires" переводится как дата модификации?

anonymous
()

Expires - это не дата модификации, а дата, когда страница будет считаться устаревшей. Судя по моему опыту, она практически не влияет на кеширование страниц (будь то FF, IE или прочие браузеры).

Оптимальное решение - передавать клиенту именно ДАТУ МОДИФИКАЦИИ страницы, но передается она не путем подстановки параметров в meta тег, а в header'е, вот пример на перле:

my $LastModified = strftime("%a, %e %b %Y %H:%M:%S GMT", gmtime(time()));
print("Last-Modified: $LastModified\n".
"Content-type: text/html\n\n");
print($WebPageContent);

artemsen
()
Ответ на: комментарий от anonymous

>Почему все считают, что "Expires" переводится как дата модификации?

А почему кто-то считает, что все считают, что Expires - это дата модификации?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от artemsen

>Оптимальное решение - передавать клиенту именно ДАТУ МОДИФИКАЦИИ

Она и отдаётся. И FF3, проверяя дату модификации, и обнаружив, что она не менялась, не загружает страницу заново. Даже не смотря на явные запреты кеширования (и вариант через Expired - только один из них, есть ещё pragama, есть no-cache в http1.1 хедере - на всё кладёт).

Обошёл это его поведение, путём выноса динамически меняемого контента в динамически генерируемый JavaScript. Как бонус - страницу можно теперь оставить полностью статическим html.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> Так это, как легко понять, информация не для них :)

я исходил из этого:

> Нельзя. Поисковики должны знать, что объект не менялся. > KRoN73 ***** (*) (23.06.2008 16:28:34)

alexsaa
()
Ответ на: комментарий от alexsaa

>я исходил из этого:

Есть страница. Поисковикам важен основной контент. Есть юзеровская информация (скажем, информация о подписке, статус занесённости в избранное и т.п.). Она не для поисковиков :) Нужно, чтобы юзерю, поменявшему, например, статус подписки, показывалась уже обновлённая страница. Так вот, Фокс на указания не использовать кеширование кладёт свой большой XUL.

Выкрутился, как уже писал, вынеся изображение всей User-info во внешние JavaScript'ы.

Типа, FF3 склоняет девелоперов к web2.0 :D

KRoN73 ★★★★★
() автор топика

> <meta name="Expires" content="Mon, 22 Oct 1973 06:45:00 GMT" />

Это и не должно работать. Почитали бы хоть, что такое meta и что вы тут наобъявляли. Вам нужно объявлять данные, "эквивалентные заголовкам http": google://meta http-equiv/

20+ человек ответило и ещё никто не увидел...

anonymous
()
Ответ на: комментарий от anonymous

> 20+ человек ответило и ещё никто не увидел...

Даже теперь, когда намекнул, я так и не увидел. Поясни - в чём дело?

anonymous
()
Ответ на: комментарий от anonymous

Дело в том, что те теги meta, которые написал автор, подходят для задания метаинформации (автор, ключевые слова и т. д.) То, что он хочет -- описать "типа-http-заголовки, но в html" делаются через другой вид тега meta, meta http-equiv.

anonymous
()
Ответ на: комментарий от anonymous

Блин, верно.. Спасибо, только сейчас обратил внимание 8-)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.