Назад | Перейти на главную страницу

Как обойти кеширование облачных вспышек, как это делает Reddit

Кто-то знает, как Reddit удается обойти статическое кеширование HTML Cloudflare после того, как пользователь успешно входит в систему с перезагрузкой страницы?

Я вижу, что текущая страница перезагружается после успешного входа в систему.

Заголовки ответа перед входом в систему:

CF-Cache-Status: HIT
CF-RAY: 23b76b8270950e30-MXP
Cache-Control: max-age=0, must-revalidate
Content-Encoding: gzip
Content-Length: 20794
Content-Type: text/html; charset=UTF-8
Date: Mon, 26 Oct 2015 16:08:27 GMT
Server: cloudflare-nginx
Vary: Accept-Encoding
X-Firefox-Spdy: 3.1
X-Frame-Options: SAMEORIGIN
strict-transport-security: max-age=15552000; includeSubDomains; preload
x-content-type-options: nosniff
x-moose: majestic
x-ua-compatible: IE=edge
x-xss-protection: 1; mode=block

Заголовки ответа после входа в систему:

CF-RAY: 23b76cb065140e30-MXP
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate, max-age=0, must-revalidate
Content-Encoding: gzip
Content-Length: 18697
Content-Type: text/html; charset=UTF-8
Date: Mon, 26 Oct 2015 16:09:16 GMT
Expires: -1
Server: cloudflare-nginx
Vary: accept-encoding
X-Firefox-Spdy: 3.1
X-Frame-Options: SAMEORIGIN
strict-transport-security: max-age=15552000; includeSubDomains; preload
x-content-type-options: nosniff
x-moose: majestic
x-ua-compatible: IE=edge
x-xss-protection: 1; mode=block

Спасибо за любые подсказки.

В CloudFlare есть два основных способа сделать это:

  • В CloudFlare вы можете установить правило страницы, чтобы избежать кеширования файлов по вашему выбору.
  • Вы можете использовать заголовки без кеширования, которые CloudFlare будет уважать.

Чтобы настроить правило страницы

  1. Перейдите в панель управления CloudFlare и выберите Правила страницы.
  2. Добавьте подходящее правило страницы * yourdomain.com / *. html
  3. Установите уровень кеширования в обход
  4. Сохранить и развернуть

Установить заголовки кеша

Справочный центр CloudFlare объясняет как управлять кешем через заголовки, отправленные из источника:

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

  • Если для заголовка Cache-Control задано значение «private», «no-store», «no-cache» или «max-age = 0» или если в ответе есть файл cookie, CloudFlare не будет кэшировать ресурс.
  • В противном случае, если заголовок Cache-Control установлен на «public», а «max-age» больше 0, или если заголовки Expires будут установлены в любое время в будущем, мы кэшируем ресурс.

Примечание. Согласно правилам RFC, «Cache-Control: max-age» имеет приоритет над заголовками «Expires». Если мы увидим и то, и другое, и они не согласятся, победит максимальный возраст.

В PHP вы можете реализовать это с помощью функции заголовка следующим образом:

header("Cache-Control: no-cache, must-revalidate");