Кеширование контента
В настройках CDN-ресурса можно включить кеширование контента — временное хранение копий файлов из источников. Кеширование бывает двух типов: на CDN-серверах и в браузерах-клиентах.
Кеширование на CDN-серверах
Если для ресурса включено кеширование на CDN-серверах, файлы копируются с источников на серверы при следующих событиях:
- Клиент запросил у CDN файл, который к тому моменту не был закеширован отвечающим сервером.
- Время жизни копии файла на сервере истекло, а файл в источнике за это время изменился (иначе время жизни продлевается на тот же период).
- Вы предзагрузили файлы из источников в настройках ресурса.
Время жизни кеша
Пока время жизни кеша не истекло, CDN-сервер возвращает клиентам кешированную копию файла и не обращается за ним к источникам.
Примечание
Если контент не запрашивался конечными пользователями в течение 36 часов, он удаляется из кеша CDN-серверов независимо от настроек опции.
Для определения времени жизни кеша можно выбрать один из двух режимов:
Режим | Описание |
---|---|
Как у источника | Файл кешируется на время, указанное в ответе источника на запрос. Источник должен добавлять к ответу HTTP-заголовок Cache-Control с директивами max-age (указывает на время жизни кеша в секундах) и public (разрешает кеширование файла на любом уровне).Если источник ответил HTTP-кодом состояния 200 , 201 , 204 , 206 , 301 , 302 , 303 , 304 , 307 или 308 , но в ответе нет заголовка, удовлетворяющего условиям выше, файл кешируется на время, указанное в настройках ресурса. Файлы из ответов с другими кодами состояния при отсутствии заголовка не кешируются. |
Свои настройки | В настройках ресурса указывается время жизни кеша по умолчанию. Оно действует для всех ответов источников с HTTP-кодами состояния 200 , 206 , 301 и 302 . Также для любого кода состояния (вне зависимости от того, входит ли он в список выше) можно указать отдельное время жизни кеша, которое имеет приоритет над временем по умолчанию.Если код состояния не входит в список и для него не указано отдельное время жизни кеша, файл из ответа с таким кодом не кешируется. |
Кеширование в браузерах
Если для ресурса включено кеширование в браузерах, CDN-серверы будут добавлять в ответы с HTTP-кодами состояния 200
, 201
, 204
, 206
, 301
, 302
, 303
, 304
, 307
и 308
заголовок Cache-Control
с директивами max-age
(указывает на время жизни кеша в секундах) и public
(разрешает кеширование файла на любом уровне). Время жизни кеша указывается в настройках ресурса.
Файлы из ответов с другими кодами состояния не кешируются.
Файлы cookie и query-параметры
Запросы к CDN-серверу могут содержать один и тот же путь в URI, но разные файлы cookie (HTTP-заголовок Set-Cookie
) и/или разные query-параметры. В настройках ресурса вы можете указать, как кешировать файлы, соответствующие таким запросам: сохранять для всех запросов одну копию файла (то есть игнорировать cookie и/или query-параметры) или считать их разными и для каждого кешировать файл отдельно.
Предзагрузка контента
Отдельные файлы можно предзагрузить из источников, то есть кешировать вручную, не дожидаясь запросов от клиентов. Рекомендуется предзагружать большие файлы, размером от 200 МБ.
Предзагрузить можно только контент, которого еще нет на серверах. Чтобы обновить уже кешированные файлы, перед предзагрузкой нужно очистить кеш.
Для предзагрузки существуют технические ограничения — лимиты.
Очистка кеша
Копии файлов, сделанные CDN-серверами, можно удалить — очистить кеш. Это позволяет быстро обновить в CDN контент, который изменился в источниках.
Кеш можно очистить полностью или частично. Рекомендуется частичная очистка: если удалить из кеша копии всех файлов, CDN-серверы сильно увеличат нагрузку на источники, обращаясь к ним за каждым запрошенным файлом.
Для частичной очистки можно указывать пути к конкретным файлам и каталогам или использовать символ *
, заменяющий любое количество символов. Каждый путь должен начинаться с символа /
или *
. Примеры путей:
/image/foo.png
— отдельный файл;/image/*.jpg
— все файлы в каталоге/image
с расширением.jpg
;*.jpg
— все файлы с расширением.jpg
;*/static/*
— все файлы, имеющие в пути подстроку/static/
.
Если файл закеширован с учетом query-параметров (то есть для каждого запроса с новыми параметрами сохранилась отдельная копия), по умолчанию удаляются все его копии. Чтобы удалить только конкретные копии, нужно явно указать их query-параметры: например, /image/foo.png?id=12345
.
Для очистки кеша существуют технические ограничения — лимиты.