Кеширование контента
В настройках CDN-ресурса можно включить кеширование контента — временное хранение копий файлов из источников. Кеширование бывает двух типов:
- на CDN-серверах, расположенных в точках присутствия.
- в браузерах-клиентах.
Кеширование на CDN-серверах
Если для ресурса включено кеширование на CDN-серверах, файлы копируются из источников в кеш серверов при следующих событиях:
- Пользователь запросил у CDN-ресурса файл, который в текущий момент не закеширован отвечающим сервером.
- Время жизни кеш-копии файла на CDN-сервере истекло, а файл в источнике за это время изменился (иначе время жизни продлевается на тот же период).
- Вы принудительно загрузили файлы из источников в кеш CDN-серверов в настройках CDN-ресурса.
Примечание
Cloud CDN не гарантирует определенную долю попаданий запросов в кеш (Cache Hit). Если 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-заголовок Cookie) и/или разные query-параметры.
Query-параметры, которые учитываются при кешировании, входят в ключ объекта в кеше. Запросы с разными значениями таких параметров соответствуют разным объектам в кеше. Параметры, которые не учитываются при кешировании, не входят в ключ: запросы, отличающиеся только значениями этих параметров, соответствуют одному объекту.
В настройках ресурса можно выбрать один из режимов кеширования query-параметров:
|
Режим |
Учет query-параметров в ключе кеша |
|
|
Все query-параметры игнорируются. Для запросов с одним путем сохраняется одна копия файла независимо от значений параметров. |
|
|
Учитываются все query-параметры. Для каждого уникального набора параметров сохраняется отдельная копия файла. |
|
|
Указанные query-параметры игнорируются, остальные учитываются. |
|
|
Учитываются только указанные query-параметры, остальные игнорируются. |
Например, если выбрать режим Кешировать только и указать параметр segment, запросам /file.m3u8?expires=1&segment=1 и /file.m3u8?expires=2&segment=1 будет соответствовать один объект в кеше. Запросу /file.m3u8?expires=1&segment=2 будет соответствовать другой объект.
Кеширование ответов на запросы с файлами cookie настраивается отдельно с помощью опции Игнорировать. Если опция выключена, ответы на запросы с заголовком Cookie не кешируются, и файлы запрашиваются из источника заново. Если опция включена, ответы кешируются, и CDN-сервер может возвращать файлы из кеша.
Принудительное кеширование контента
Отдельные файлы можно принудительно (вручную) загрузить из источников в кеш CDN-серверов, не дожидаясь запросов от клиентов. Вручную в кеш рекомендуется загружать большие файлы размером от 200 МБ.
Принудительно загрузить в кеш можно только контент, которого еще нет на CDN-серверах. Чтобы обновить в кеше уже имеющиеся там файлы, необходимо предварительно очистить кеш.
Для принудительного кеширования существуют технические ограничения — лимиты.
Очистка кеша
Копии файлов, сделанные CDN-серверами, можно удалить — очистить кеш. Это позволяет быстро обновить в CDN контент, который изменился в источниках.
Кеш можно очистить полностью или частично. Рекомендуется частичная очистка: если удалить из кеша копии всех файлов, CDN-серверы сильно увеличат нагрузку на источники, обращаясь к ним за каждым запрошенным файлом.
Для частичной очистки кеша можно указывать пути к конкретным файлам и каталогам. Каждый путь должен начинаться с символа /.
Примечание
-
Количество путей к файлам в одном запросе на очистку кеша ограничено.
-
Символ подстановки
*может быть указан только в конце пути. Если указать*в начале или середине пути, кеш для соответствующих этому пути файлов не будет очищен. -
Если для ресурса включена сегментация файлов, при выборочной очистке кеша конкретного файла нужно учитывать, что файл хранится на CDN-серверах по частям. Используйте один из вариантов:
- добавьте символ подстановки
*в конец пути к файлу — например,/image/foobar.png*; - укажите в пути конкретный диапазон байт сегмента с помощью суффикса
@bytes=<начало>-<конец>— например,/image/foobar.png@bytes=0-10485759для очистки первого сегмента размером 10 МБ.
Если указать только путь к файлу без
*или суффикса@bytes, кеш сегментированного файла очищен не будет. - добавьте символ подстановки
Примеры путей:
/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