Может ли Cloudflare кэшировать HTML для анонимных пользователей, но не для зарегистрированных пользователей?

У нас есть веб-сайт с анонимным пользовательским контентом, который обычно статичен (обновляется один раз в час), а контент для зарегистрированных пользователей отличается для каждого пользователя и часто обновляется.

Можно ли настроить cloudflare таким образом, чтобы HTML кэшировался для анонимных пользователей, но не для зарегистрированных пользователей, учитывая один и тот же URL-адрес для обоих?

Есть ли какие-либо заголовки кеша, которые мы можем установить, которые имеют отношение?


person Eric    schedule 21.03.2013    source источник
comment
Как вы с этим справились? Любые лучшие решения?   -  person steve0nz    schedule 27.02.2017


Ответы (5)


Я боролся с тем же сценарием, и, насколько я вижу, нет никакого способа, в cloudflare вы можете настроить правила страницы, но они будут смотреть только на сам URL-адрес.

Таким образом, единственным решением, которое я вижу, было бы наличие разных URL-адресов (какой-то дополнительный параметр или, возможно, субдомен) для каждого типа пользователей, тогда вы легко настроите правила, чтобы вручную принудительно установить время истечения кэша.

person jmserra    schedule 25.07.2013

Я не уверен, что это сработает, но единственный способ, которым я могу думать об этом, — через HTTP/HTTPS, поскольку вы можете использовать это в правилах страницы CloudFlare.

Таким образом, если вы установите для константы WordPress FORCE_SSL_ADMIN значение true, а затем перенаправите все запросы URL-адресов зарегистрированных пользователей на схему HTTPS страницы, это может сработать и, таким образом, сделать возможным обход кэша CloudFlare?

person majick    schedule 19.02.2016

Это невозможно, если вы не находитесь на уровне плана Enterprise.

https://www.cloudflare.com/plans/

person RyanK    schedule 09.08.2016

Да. Cloudflare говорит, что он будет учитывать метатеги, не запрашивающие кэш, поэтому просто добавьте эти теги в раздел заголовка страницы для вошедших в систему пользователей.

Пример (с использованием smarty)

{if $loggedin}
<meta http-equiv="cache-control" content="no-cache" />
{/if}

(с использованием PHP)

if($loggedin)
  {
  echo "<meta http-equiv=\"cache-control\" content=\"no-cache\" />";
  }
person Danny Carlton    schedule 18.07.2017
comment
Это не помешает вошедшим в систему пользователям обслуживать кешированную версию сайта для выхода из системы. - person Ludwik Trammer; 20.07.2018
comment
@LudwikTrammer, я использовал Cloudflare для всех своих сайтов, и мне еще не отправили страницу выхода из системы, когда я вошел в систему. У меня более 50 сайтов. - person Danny Carlton; 21.07.2018
comment
Тогда может страницы вообще не кешируются? Вы включили правило «Кэшировать все»? Ваше решение не позволяет Cloudflare кэшировать страницы, которые видят вошедшие в систему пользователи, и не предотвращает кэширование страниц, которые видят вышедшие из системы пользователи. Я думаю, что мы согласны с этой частью. Итак, что происходит, когда клиент пользователя запрашивает страницу, которая находится в кеше Cloudflare (независимо от того, вошел ли пользователь в систему или нет — Cloudflare ничего об этом не знает)? Они получат версию прямо из кеша. Что в вашем случае является выходом из системы. Ваш сервер в таком случае вообще не пострадал. - person Ludwik Trammer; 22.07.2018
comment
У меня стоит в стандартном режиме кэширования. Я отлично кеширую, но обслуживаю живые страницы для всех, кто вошел в систему. Так работает CloudFlare. Он учитывает коды заголовков, когда его просят не кэшировать. Когда вы делаете запрос, заголовок извлекается первым. Заголовок генерируется скриптом, и если вы вошли в систему (и используете приведенный выше код), то CloudFlare увидит, что ему нужно получить новую страницу для вас. Если в заголовке нет инструкций по кэшированию, он будет обслуживать кэшированную страницу и не будет кэшировать страницы, для которых в заголовке указано не кэшировать, поэтому будет выбрана последняя кешируемая страница. - person Danny Carlton; 31.07.2018
comment
Вы ошибаетесь. CloudFlare не обращается к серверу за кэшированными запросами. Он подает их прямо из кэша. По умолчанию Cloudflare кэширует только статические файлы перечислены здесь. Поскольку вы включили правило «Кэшировать все», ваши страницы просто не кэшируются — только изображения, CSS, JS и другие статические вещи. - person Ludwik Trammer; 31.07.2018
comment
См. также: support.cloudflare .com/hc/ru-ru/articles/ - person Ludwik Trammer; 31.07.2018
comment
Я только что задал аналогичный вопрос здесь: заголовок wordpress.stackexchange.com/questions/356303/ - кто-нибудь понял это окончательно? - person Rodney; 14.01.2020

Решение можно найти здесь

Добавьте элемент управления частным кешем в заголовок страницы:

//recommended by cloudflare for logged in users
if ( is_user_logged_in() ) {
header(‘Cache-Control: private, max-age=3600’);
}
person AJD    schedule 01.02.2017
comment
Это не помешает вошедшим в систему пользователям обслуживать кешированную версию сайта для выхода из системы. - person Ludwik Trammer; 20.07.2018