Skip to content
На этой странице:

Раздел Кэширование

CDN кэширует один и тот же файл с разными куками из HTTP-заголовка запроса Set-Cookie как разные файлы. В результате каждый новый запрос клиента не отдается из кэша, а проксируется на источник. Это снижает процент кэшированного трафика.

Включите опцию «Игнорировать Set-Cookie» для того, чтобы кэшировать файлы с куками (англ. cookies) как один объект.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Кеширование
  • включите опцию «Игнорировать Set-Cookie»

Доставка устаревшего контента из кэша при недоступности сервера-источника

Опция позволяет отдавать последний кэшированный контент при недоступности сервера-источника при следующих ошибках:

  • error (сетевые проблемы)
  • timeout
  • invalid_header
  • updating (обновление кэша)
  • http_500
  • http_502
  • http_503
  • http_504
  • http_403
  • http_404
  • http_429.

Устаревший контент будет отдаваться с заголовком X-Cache: Stale. Доступность источника будет проверяться с каждым запросом пользователя. Если работоспособность источника восстановилась, CDN закэширует свежую версию файла. В случае, когда работоспобность источника не восстановилась, CDN-серверы будут отдавать Stale-контент, пока не истечет время жизни кэша.

На момент недоступности сайта в кэше CDN может храниться недостаточно контента для отображения страницы целиком, по этой причине невозможно гарантировать, что все файлы будут отданы корректно. При открытии страницы могут не загрузиться некоторые изображения, таблицы стилей или другой статический контент.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Кеширование
  • включите опцию "Всегда онлайн"

Возможно включить опцию или выбрать ошибки, при которых CDN будет отдавать устаревший контент.

Кэширование в браузере. Настройка параметров кэширования для браузеров пользователей

Возможно настроить время кэширования файлов в браузерах конечных пользователей.

Использовать настройки источника

По умолчанию время кэширования в браузере задается настройками источника. Если на источнике таких настроек нет, то в браузере контент кэшироваться не будет.

Задать настройки на CDN

Настройки кэширования в браузере задает CDN.

В кэше браузера будут храниться только следующие коды ответа: 200, 201, 204, 206, 301, 302, 303, 304, 307, 308. Ответы не будут кэшироваться с остальными кодами в браузере пользователя. По умолчанию время жизни кэша в браузере 4 дня.

Кэширование на CDN. Настройка и проверка параметров кэширования на CDN-серверах

Возможно задать время хранения контента в кэше CDN-серверов.

Когда время хранения кэша истекает, CDN-серверы обращаются к файлу, находящемуся на источнике, чтобы сравнить HTTP-заголовок Etag:

  • если значения заголовка не совпадают:
    • CDN кэшируют новый файл на время, заданное для хранения контента в кэше CDN
  • если значения заголовка совпадают:
  • CDN продолжит отдавать пользователям имеющийся в кэше файл еще один период времени, заданный для хранения контента в кэше CDN

Задать параметры кэширования

Опция «Кеширование на CDN» задаёт время хранения контента в кэше CDN-серверов. У неё есть два варианта работы:

  • задать настройки на CDN
  • использовать настройки источника

Задать настройки на CDN

CDN-серверы запрашивают контент с источника и кэшируют его на время, заданное в опции «Задать настройки на CDN».

Настройка имеет два параметра:

  • время жизни кэша
  • чтобы задать время хранения кэша для запросов с кодами ответа 200, 206, 301, 302. 4xx и 5xx коды ответа кэшироваться не будут
  • расширенные правила кэширования
  • чтобы задать время хранения кэша для запросов с другими кодами ответа или, чтобы переопределить некоторые из кодов параметра «Время жизни кеша»
  • значения параметра имеют больший приоритет, чем значения параметра «Время жизни кеша»

Пример:

  • в настройках опции выбрали Задать настройки на CDN и указали время жизни кэша 4 дня
  • в расширенных правилах добавили 3 правила:
  • код ответа 200 – 10 минут
  • код ответа 404 - 1 минуту

  • в результате настроек запросы будут кэшироваться так:
  • запросы с кодом ответа 200 – 10 минут
  • запросы с кодом ответа 404 - 1 минуту
  • запросы с кодом ответа 206, 301, 302 - 4 дня
  • 4хх (кроме 404), 5хх - кэшироваться не будут

Важно

Если контент не запрашивается конечными пользователями, он удаляется из кэша CDN-серверов через 36 часов, независимо от настроек опции.

Использовать настройки источника

При запросе контента с сервера-источника CDN-серверы ориентируются на заголовок Cache-Control, настроенный на источнике, и кэшируют контент на время, заданное в качестве его значения.

Если на сервере-источнике отсутствует заголовок Cache-Control, то CDN использует время хранения, заданное в опции «Время жизни кеша по умолчанию».

Данная настройка применяется только для кодов ответов 200, 201, 204, 206, 301, 302, 303, 304, 307, 308, остальные коды не кэшируются.

Важно

Если контент не запрашивается конечными пользователями, он удаляется из кэша CDN-серверов через 36 часов, независимо от настроек опции.

Настройка кэширования на источнике

По умолчанию наследуются все заголовки, заданные на источнике. Время хранения кэша на CDN-серверах определяется HTTP-заголовком Cache-Control.

Добавьте заголовок Cache-Control на сервер в файл .htaccess или nginx.conf. Заголовок должен содержать директивы public, max-age.

Пример конфигурации Apache

<ifModule mod\_headers.c>  
 <FilesMatch "\\.(gif|ico)$">  
     Header set Cache-Control "max-age=31536000, public"  
 </FilesMatch>  
  
 <FilesMatch "\\.(js)$">  
     Header set Cache-Control "max-age=31536000,   
             public"  
 </FilesMatch>  
 </ifModule>

Пример конфигурации Nginx

server {  
   #...  
   location ~\* \\.(?:ico|css|js|gif|jpe?g|png)$ {  
     add\_header Cache-Control "max-age=88000,  public";  
   }  
   #...  
}

Проверка настроек кэширования

Проверьте, какие заголовки кэширования присутствуют при запросе файла, интегрированного с CDN.

Для расшифровки используйте описание заголовков ниже.

Проверка с помощью команды cURL

В терминале (terminal для MacOS; cmd для Windows) введите: curl -I http://cdn.example.ru/js/intlTelInput/css/intlTelInput.css, где http://cdn.example.ru/js/intlTelInput/css/intlTelInput.css - ссылка на файл, интегрированный с CDN.

Будет получен следующий вывод; обратите внимание на заголовки Cache-Control, Cache, X-Cached-Since, X-ID:

HTTP/1.1 200 OK  
Server: nginx/1.13.1  
Date: Fri, 09 Jun 2017 12:54:24 GMT  
Content-Type: image/jpeg  
Content-Length: 124024  
Connection: keep-alive  
X-Image\-Generated: 29  
X-Image\-Meta: 1024x768  
X-Image\-Read: 71  
Expires: Wed, 06 Dec 2017 12:51:43 GMT  
Access-Control-Allow-Origin: \*  
Last-Modified: Sun, 01 Jan 2017 12:00:00 GMT
  • Cache-Control: max-age=315360000, public — время, на которое файл будет закэширован на сервере в секундах.
  • Cache: HIT - файл отдан из кэша CDN.
  • X-Cached-Since: 2017-06-09T12:51:43+00:00 — время, с которого файл находится в кэше сервера CDN.
  • X-ID: m9-up-e245 — сервер CDN, с которого был отдан файл.

Если возникает подозрение, что контент не кэшируется, проверьте настройки на источнике или обратитесь в техническую поддержку

Проверка с помощью инструментов разработчика в браузере

  • откройте любой интернет-браузер (например, Google Chrome)
  • откройте сайт
  • нажмите на кнопку F12 клавиатуры - откроется панель разработчика
  • выберите вкладку Сеть (Network)
  • обновите страницу - нажмите на кнопку F5 клавиатуры
  • будет получен список всех файлов, которые были загружены с сайта
  • найдите статический файл (например: jpeg, png, img), интегрированный с CDN и нажмите на него
  • на вкладке Headers справа расположены заголовки, настроенные на сервере

  • проанализируйте их, используя описание важных заголовков ниже

Важные заголовки

  • проверить, откуда (с вашего сервера или с CDN-сервера) был отправлен контент, возможно по значению HTTP-заголовка X-Cache:
  • X-Cache: HIT — файл отдался из кэша CDN
  • X-Cache: MISS — файл был запрошен с источника
  • проверить, с какого сервера CDN был отправлен контент, можно по значению заголовка:
  • X-ID: [m9-up-e245] - файл отдан с сервера m9-up-e245
  • время, когда контент был закэширован на CDN-сервере, возможно узнать по значению заголовка X-Cached-Since:
  • X-Cached-Since: 2017-06-09T12:51:43+00:00 — время, с которого файл находится в кэше узла CDN

Поддержка заголовков

Для проверки кэширования важно понимать, какие значения заголовков кэширования поддерживаются CDN-серверами, а какие - нет.

Совместимые с CDN параметры HTTP-заголовка Cache-Control:

  • Cache-Control: Max-Age — задает время жизни файла в кэше в секундах
  • Cache-Control: Public — указывает на то, что кэшировать файл сможет не только конечный клиент пользователя (браузер), но и прокси-серверы, CDN-серверы и т.д.

Несовместимые с CDN параметры HTTP-заголовка Cache-Control:

  • Cache-Control: Private — директива, противоположная «public» — указывает на то, что файл не должен кэшироваться промежуточными прокси
  • Cache-Control: No-cache — позволяет указать, что клиент должен делать запрос на сервер каждый раз при обращении к файлу

Игнорирование параметров запросов при кэшировании на CDN-сервере

Данная опция определяет, как кэшировать файлы с разными параметрами запроса. Параметр запроса — это уникальная строка запроса (параметр после знака вопроса) в URL.

Пример:

_http://cdn.example.com/photo.jpeg?id=6&color=blue_ _http://cdn.example.com/photo.jpeg?id=1&color=blue_

По умолчанию опция выключена. Чтобы ее включить:

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел кэширование
  • выберите Параметры запроса

У включенной опции доступно 3 переключателя:

  • Игнорировать все

Выбрана по умолчанию. Файлы с разными параметрами запроса кэшируются как объекты с одинаковым ключом независимо от значения параметров.

Пример:

Следующие файлы будут закэшированы как объекты с одним ключом кэширования, так как все параметры будут проигнорированы:

_http://cdn.example.com/photo.jpeg?id=6&color=blue_ _http://cdn.example.com/photo.jpeg?id=1&color=blue_

  • Игнорировать все, кроме

Файлы с указанными параметрами запроса кэшируются как объекты с разными ключами, файлы с другими параметрами — как объекты с одинаковым ключом. Каждый параметр вводится в отдельную строку поля.

Пример:

Указан параметр id. Следующие файлы будут закэшированы как объекты с разными ключами, так как значения параметра id отличаются, значение параметра color будут проигнорированы.

_http://cdn.example.com/photo.jpeg?id=6&color=blue_ _http://cdn.example.com/photo.jpeg?id=1&color=blue_

Указан параметр color. Следующие файлы будут закэшированы как объекты с одинаковыми ключами, так как значения параметра color совпадают, а параметр id будет проигнорирован.

_http://cdn.example.com/photo.jpeg?id=6&color=blue_ _http://cdn.example.com/photo.jpeg?id=1&color=blue_

  • Игнорировать только

Файлы с указанными параметрами запроса кэшируются как объекты с одинаковым ключом, файлы с другими параметрами — как объекты с разными ключами. Каждый параметр вводится в отдельную строку поля.

Пример:

Указан параметр id. Файлы будут закэшированы как объекты с одинаковыми ключами, так как значения параметра id будут проигнорированы, а значения параметров color совпадают.

_http://cdn.example.com/photo.jpeg?id=6&color=blue_ _http://cdn.example.com/photo.jpeg?id=1&color=blue_

Указан параметр color. Файлы будут закэшированы как объекты с разными ключами, так как значения параметра color будут проигнорированы, а значения параметров id отличаются.

_http://cdn.example.com/photo.jpeg?id=6&color=blue_ _http://cdn.example.com/photo.jpeg?id=1&color=blue_

Проверка кэширования

По умолчанию наследуются все заголовки, заданные на источнике.

Проверка настроек

Проверьте, какие заголовки кэширования присутствуют при запросе файла, интегрированного с CDN. Для расшифровки используйте описание заголовков ниже.

Проверка с помощью команды cURL

В терминале (terminal для MacOS; cmd для Windows) пропишите: curl -I http://cdn.example.ru/js/intlTelInput/css/intlTelInput.css, где http://cdn.example.ru/js/intlTelInput/css/intlTelInput.css - ссылка на файл, интегрированный с CDN

Будет получен следующий вывод; обратите внимание на заголовки Cache-Control, Cache, X-Cached-Since, X-ID:

HTTP/1.1 200 OK  
Server: nginx/1.13.1  
Date: Fri, 09 Jun 2017 12:54:24 GMT  
Content-Type: image/jpeg  
Content-Length: 124024  
Connection: keep-alive  
X-Image\-Generated: 29  
X-Image\-Meta: 1024x768  
X-Image\-Read: 71  
Expires: Wed, 06 Dec 2017 12:51:43 GMT  
Cache-Control: max-age\=15552000  
Access-Control-Allow-Origin: \*  
Last-Modified: Sun, 01 Jan 2017 12:00:00 GMT
  • Cache-Control: max-age=315360000, public — время, на которое файл будет закэширован на сервере в секундах.
  • Cache: HIT - файл отдался из кэша CDN.
  • X-Cached-Since: 2017-06-09T12:51:43+00:00 — время, с которого файл находится в кэше сервера CDN.
  • X-ID: m9-up-e245 — сервер CDN, с которого был отдан файл.

Если возникают подозрения, что контент не кэшируется, проверьте настройки на источнике или обратитесь в техническую поддержку

Проверка с помощью инструментов разработчика в браузере

  • откройте любой интернет-браузер (например, Google Chrome)
  • откройте сайт
  • нажмите на кнопку F12 клавиатуры - откроется панель разработчика
  • выберите вкладку Сеть (Network)
  • обновите страницу - нажмите на кнопку F5 клавиатуры
  • будет получен список всех файлов, которые были загружены с сайта
  • найдите статический файл (например: jpeg, png, img), интегрированный с CDN и нажмите на него
  • на вкладке Headers справа расположены заголовки, настроенные на сервере
  • проанализируйте их, используя описание важных заголовков ниже

Важные заголовки

  • проверить, откуда (с вашего сервера или с CDN-сервера) был отправлен контент, можно по значению HTTP-заголовка X-Cache:
  • X-Cache: HIT — файл отдался из кэша CDN
  • X-Cache: MISS — файл был запрошен с источника
  • проверить, с какого сервера CDN был отправлен контент, можно по значению заголовка:
  • X-ID: [m9-up-e245] - файл отдан с сервера m9-up-e245
  • время, когда контент был закэширован на CDN-сервере, можно узнать по значению заголовка X-Cached-Since:
  • X-Cached-Since : 2017-06-09T12:51:43+00:00 — время, с которого файл находится в кэше узла CDN

Поддержка заголовков

Для проверки кэширования важно понимать, какие значения заголовков кэширования поддерживаются CDN-серверами, а какие - нет.

Совместимые с CDN параметры HTTP-заголовка Cache-Control:

  • Cache-Control: Max-Age — задает время жизни файла в кэше в секундах.
  • Cache-Control: Public — указывает на то, что кэшировать файл сможет не только конечный клиент пользователя (браузер), но и прокси-серверы, CDN-серверы и т.д.

Несовместимые с CDN параметры HTTP-заголовка Cache-Control:

  • Cache-Control: Private — директива, противоположная «public» — указывает на то, что файл не должен кэшироваться промежуточными прокси.
  • Cache-Control: No-cache — позволяет указать, что клиент должен делать запрос на сервер каждый раз при обращении к файлу.