Кеширование контента
В настройках CDN-ресурса можно включить кеширование контента — временное хранение копий файлов из источников. Кеширование бывает двух типов:
- на CDN-серверах, расположенных в точках присутствия.
- в браузерах-клиентах.
Кеширование на CDN-серверах
Если для ресурса включено кеширование на 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-параметры) или считать их разными и для каждого кешировать файл отдельно.
Принудительное кеширование контента
Отдельные файлы можно принудительно (вручную) загрузить из источников в кеш CDN-серверов, не дожидаясь запросов от клиентов. Вручную в кеш рекомендуется загружать большие файлы размером от 200 МБ.
Принудительно загрузить в кеш можно только контент, которого еще нет на CDN-серверах. Чтобы обновить в кеше уже имеющиеся там файлы, необходимо предварительно очистить кеш.
Для принудительного кеширования существуют технические ограничения — лимиты.
Очистка кеша
Копии файлов, сделанные CDN-серверами, можно удалить — очистить кеш. Это позволяет быстро обновить в CDN контент, который изменился в источниках.
Кеш можно очистить полностью или частично. Рекомендуется частичная очистка: если удалить из кеша копии всех файлов, CDN-серверы сильно увеличат нагрузку на источники, обращаясь к ним за каждым запрошенным файлом.
Для частичной очистки кеша можно указывать пути к конкретным файлам и каталогам. Каждый путь должен начинаться с символа /.
Примечание
Символ подстановки * может быть указан только в конце пути. Если указать * в начале или середине пути, кеш для соответствующих этому пути файлов не будет очищен.
Примеры путей:
/image/foobar.png— отдельный файл;/image/foo*— все файлы в каталоге/image/, имена которых начинаются сfoo;/static/*— все файлы в каталоге/static/.
Если файл закеширован с учетом query-параметров (то есть для каждого запроса с новыми параметрами сохранилась отдельная копия), по умолчанию удаляются все его копии. Чтобы удалить только конкретные копии, нужно явно указать их query-параметры: например, /image/foo.png?id=12345.
Важно
Если в CDN-ресурсе используются заголовки Vary (например, Vary: Accept-Encoding), то при очистке кеша в конец пути необходимо добавлять символ подстановки *, чтобы удалять все возможные закешированные версии файлов. Например: /image/foobar.png*.
Для очистки кеша существуют технические ограничения — лимиты.
Примеры использования
- Организация сине-зеленого и канареечного развертывания версий веб-сервиса
- Публикация обновлений для игр с помощью Yandex Cloud CDN