Xpoint
   [напомнить пароль]

Браузер кэширует страницы

Метки: xpoint
[арх]
2005-12-07 15:13:08 [обр] Sm0ke(0/19)[досье]

Использую opera web browser.
Когда захожу в тему, которую уже читал, приходится дополнительно обновлять страницу (чтобы появились новые ответы), так как она (судя по всему) читается из кэша.

Почему-бы не прописать запрет на кэширование браузером топиков?
Или посоветуйте как настроить оперу...

спустя 2 минуты [обр] Sm0ke(0/19)[досье]
Вот даже так:
Создал я эту тему, перешёл в раздел Xpoint.ru » Форумы » О форуме Xpoint
И приходится нажимать F5 чтобы увидеть мой пост в списке.
спустя 15 минут [обр] Владимир Палант(122/4445)[досье]

В Опере "слегка" радикальное кеширование, чтобы создать впечатление быстрого браузера.

Preferences - Advanced - History - Check documents - Always

Я так понимаю, что это оно.

спустя 19 часов [обр] Sm0ke(0/19)[досье]
Спасибо Владимир Палант[досье], так и есть.
спустя 1 месяц 24 дня [обр] Владимир Михайленко(0/33)[досье]
> Я так понимаю, что это оно.
Оно-то это оно, но может все-таки лучше добавить необходимый заголовок? Или это навредит в другом?
спустя 12 часов [обр] Андрей Новиков(288/1242)[досье]
Владимир Михайленко[досье], т.е. Вы предлагаете ради одного маргинала, использующего уродский глючный браузер, испортить жизнь всем остальным?
спустя 9 дней [обр] Владимир Михайленко(0/33)[досье]
Нет. А в чем навредит?
спустя 1 день 5 часов [обр] Сергей Круглов(104/2057)[досье]
Владимир Михайленко[досье]
Тем, что кэширование все-таки не для головной боли придумано.
спустя 14 дней [обр] Константин[досье]

Какое может быть кэширование на форумах "в принципе"? Стандарт HTTP-заголовков не просто так придумали, а для управления кэшированием в том числе. Поведение Оперы стандартов не нарушает, оно их использует для эффективной экономии трафика. При этом Опера полагается на корректные ХТТП-заголовки сервера. И все сайты она корректно отображает, за исключением нескольких подобных этому.

А у вас получается что-то вроде браузерных войн в былые времена - сделали ресурс для одного браузера и радостно смотрят на статистику по браузерам ([FYI] Раскладка по браузерам на Xpoint)
Ну не хочу я включать "Check documents = Always" ради одного-двух сайтов. Вот выйдет стабильная 9-я Опера с пер-сайт настройками, тогда может почаще буду заходить - а пока что только если мне самому понадобится помощь.

спустя 1 час 44 минуты [обр] Сергей Чернышев(77/589)[досье]
Знатоки, не могли бы вы разъяснить мне, а также тем коллегам, кто пользуется Oper-ой что именно она делает не так и как следует кэшировать документы, а то душой-то я уверен, что она глючна и корява, но хотелось бы осознать всю запущенность... указание на какой-нибудь хороший объяснительный документ в интернете на английском или на русском будет вполне достаточно.
спустя 1 день 15 часов [обр] Владимир Палант(122/4445)[досье]
Opera ничем не пользуется. Просто Opera все кеширует пять часов (установка по умолчанию, если нет заголовка Cache-Control) и в это время не проверяет, изменилось ли что-нибудь. У всех нормальных браузеров для документов без Last-Modified гораздо более целесообразные установки.
спустя 3 часа 38 минут [обр] Сергей Чернышев(77/589)[досье]
Владимир Палант[досье]
Согласен - отморозки.
спустя 3 часа 14 минут [обр] Константин[досье]

мда уж. Господа, читайте RFC - они рулез

Разбираю по пунктам:

Сервер выдает следующий заголовок:
"Cache-Control: private, proxy-revalidate, s-maxage=0"

==1) private:

  Indicates that all or part of the response message is intended for a
  single user and MUST NOT be cached by a shared cache. This allows an
  origin server to state that the specified parts of the response are
  intended for only one user and are not a valid response for requests
  by other users. A private (non-shared) cache may cache the response.

  Note: This usage of the word private only controls where the
  response may be cached, and cannot ensure the privacy of the
  message content.

<-- тут все нормально

==2) proxy-revalidate:

  1. If the response includes the "proxy-revalidate" Cache-Control

        directive, the cache MAY use that response in replying to a
        subsequent request, but a proxy cache MUST first revalidate it with
        the origin server, using the request-headers from the new request
        to allow the origin server to authenticate the new request.

  1. If the response includes the "must-revalidate" Cache-Control

        directive, the cache MAY use that response in replying to a
        subsequent request, but all caches MUST first revalidate it with
        the origin server, using the request-headers from the new request
        to allow the origin server to authenticate the new request.

<-- тут видим, что параметр proxy-revalidate дает браузеру самому решать, когда можно сделать следующий запрос к серверу. Это может быть и 1 секунда и 5 лет.
Использовать надо параметр "must-revalidate".

==3) s-maxage:

If a response includes an s-maxage directive, then for a shared cache (but not for a private cache), the maximum age specified by this directive overrides the maximum age specified by either the max-age directive or the Expires header. The s-maxage directive also implies the semantics of the proxy-revalidate directive (see section 14.9.4), i.e., that the shared cache must not use the entry after it becomes stale to respond to a subsequent request without first revalidating it with the origin server. The s- maxage directive is always ignored by a private cache.

<-- тут мы видим, что этот параметр вообще в нашем случае ничего не определяет, поскольку первой директивой стоит "private".

Резюмируем:

  1. Ни Опера ни ФФ ни ИЕ не нарушают стандартов в данном случае, просто они по разному себя ведут (но все в рамках стандартов).
  2. Опера более полно использует возможности, предоставляемые стандартом. Предоставляет пользователю гибкое управление своим поведением (как, наверное, и задумывалось при разработке данного стандарта).
  3. Разработчик данного сайта не правильно понимает HTTP-стандарты и плохо представляет, что такое правильное управление кэшированием (см. пункт 4).
  4. Непонятно, зачем данный ресурс вообще разрешает какое-бы-то-нибыло кэширование. Ведь он его никак не использует:

4.1. Ставим в Опере Check documents = Always
4.2. Загружаем страницу, которая только что был загружена и еще не изменилась.
4.3. Видим, что Опера логично посылает заголовок "If-Modified-Since"
4.4. Видим, что сервер нелогично посылает нам опять всю страницу...
Короче отсутствие всякой логики.

спустя 1 час 28 минут [обр] Сергей Чернышев(77/589)[досье]
Константин[досье] излагает хорошо - что скажете, коллеги?
спустя 16 минут [обр] Константин[досье]
Да че тут говорить, в RFC уже все написано %=))
С HTTP-заголовками я кстати уже намучался на сайте, который вы нам делали. Долго не мог понять, почему нас яндекс не индексирует...
В общем, думаю вам не мешало бы пересмотреть свои взгляды на важность такой, вроде бы мелочи, как http-протокол. Ведь на самом деле это очень важная мелочь %=)
спустя 2 часа 9 минут [обр] Сергей Чернышев(77/589)[досье]
Константин[досье]
Вы, это кто, позвольте спросить?
спустя 5 часов [обр] Константин[досье]

Сергей Чернышев[досье]
Посмотрите мой хвост и зайдите на сайт - сразу все вспомните. Мы даже встречались разок - во время разработки вами того движка я приезжал в Москву и заходил к вам.

ЗЫ. я тоже вас узнал только перед своим последним постом, когда удосужился на фотку поглядеть %)

спустя 15 дней [обр] Владимир Палант(122/4445)[досье]
Заменил proxy-revalidate на must-revalidate — посмотрим, что теперь будет (в Опере и в других браузерах).
спустя 2 дня 13 часов [обр] Константин[досье]
че-то все-равно опера по прежнему себя ведет... Попозже глубже покопаю
спустя 1 день 8 часов [обр] Константин[досье]

Не помню, откуда брал предыдущие цитаты, но видимо, то были сильно сокращенные пересказы стандарта %=))

Вот что раскопал (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9):

must-revalidate
Because a cache MAY be configured to ignore a server's specified expiration time, and because a client request MAY include a max- stale directive (which has a similar effect), the protocol also includes a mechanism for the origin server to require revalidation of a cache entry on any subsequent use. When the must-revalidate directive is present in a response received by a cache, that cache MUST NOT use the entry after it becomes stale to respond to a
subsequent request without first revalidating it with the origin server. (I.e., the cache MUST do an end-to-end revalidation every time, if, based solely on the origin server's Expires or max-age value, the cached response is stale.)
The must-revalidate directive is necessary to support reliable operation for certain protocol features. In all circumstances an HTTP/1.1 cache MUST obey the must-revalidate directive; in particular, if the cache cannot reach the origin server for any reason, it MUST generate a 504 (Gateway Timeout) response.
Servers SHOULD send the must-revalidate directive if and only if failure to revalidate a request on the entity could result in incorrect operation, such as a silently unexecuted financial transaction. Recipients MUST NOT take any automated action that violates this directive, and MUST NOT automatically provide an unvalidated copy of the entity if revalidation fails.
Although this is not recommended, user agents operating under severe connectivity constraints MAY violate this directive but, if so, MUST explicitly warn the user that an unvalidated response has been provided. The warning MUST be provided on each unvalidated access, and SHOULD require explicit user confirmation.

===

если я все правильно понял, то must-revalidate заставяет кэш обращаться к оригинальному серверу только после устаревания документа. А время устаревания у вас не задано (s-maxage работает только для проксей) и берется умолчальное в браузере.

Powered by POEM™ Engine Copyright © 2002-2005