Данный раздел предназначен для более тонкой настройки работы CDN-сети. После создания ресурса на странице его редактирования появится вкладка "Правила". В данной вкладке можно редактировать базовое правило (которое распространяется на весь ресурс), либо создавать индивидуальные правила для какого-либо раздела/пути. Правила позволяют управлять заголовками, кэшированием, CORS и авторизацией.
Основное
Укажите путь до директории или к конкретному файлу, к которому нужно применить данное правило.
Заголовки
В этом разделе Вы можете указать специальные заголовки, которые требуется добавить при обращении к источнику данных (вид "to origin"), либо при раздаче контента конечным пользователям (вид "to customer").
Таймауты
В этом разделе Вы можете указать допустимые таймауты при обращении узлов CDN к вашему ориджину. В случае, если фактические значения начнут превышать допустимые — произойдёт переключение на другой источник контента, указанный в разделе Источник данных.
Кэширование
В этом разделе Вы можете указать время кэширования в зависимости от кода ответа (2xx, 3xx, 4xx, 5xx), установить игнорирование заголовков управления кэшированием ("Expires" и "Cache-Control"), а также включить учет query string при кэшировании.
CORS
Описание
В определённых случаях обращение к контенту, размещённому в сети CDN, расценивается браузером как кросс-доменный запрос и блокируется. В первую очередь это касается шрифтов. Проблема решается выставлением заголовков CORS (Cross-Origin Resource Sharing) для кэшируемых объектов.
Вариантов два:
- Вы сами выставляете заголовки CORS на сервере-источнике и отключаете их проверку в нашей сети.
- Вы настраиваете проверку CORS через наш личный кабинет.
Настройка через личный кабинет
Механизм проверки CORS, предоставляемый для конфигурации, основывается на работе нашего собственного модуля. Его функциональность базируется на рекомендациях W3C.
Основные принципы работы модуля:
При включенном CORS заголовки Access-Control-* от ориджина не учитываются ни при каких условиях и удаляются из ответа.
Запрос без заголовка Origin не является кросс-ресурсным и заголовки Access-Control-* клиенту не передаются.
Заголовки Access-Control-Request-* не добавляются нашим модулем ни при каких условиях, т.к. это входящие заголовки запроса, формируемые браузером, как и Origin.
При наличии заголовка Origin его содержимое проверяется на соответствие с заданным пользователем. В случае отсутствия ограничений заголовок Access-Control-Allow-Origin ответа будет содержать "*", в случае наличия ограничений и попадания Origin в список разрешенных ACAO будет содержать http(s?)://${http_origin}, в любом другом случае ответ заголовков Access-Control-* содержать не будет.
Заголовок Access-Control-Expose-Headers добавляется в том случае, если такие заголовки заданы пользователем. По умолчанию мы проставляем разрешение на доступ к Content-Range для работы range-запросов (для плееров на JS).
Заголовок Access-Control-Allow-Credentials (ACAC) выставляется в соответствии с заданным пользователем.
Заголовки Access-Control-Allow-Methods, Access-Control-Allow-Headers и Access-Control-Max-Age проставляются только в ответе на запрос с методом OPTIONS, который обрабатывается локально и на ориджин не передается.
Заголовок Access-Control-Allow-Methods выставляется равным содержимому заголовка Access-Control-Request-Method в случае его наличия и попадания его содержимого в список простых запросов (GET, HEAD, POST), либо в список, заданный пользователем. Если метод не попадает в список разрешенных - ответ заголовков Access-Control-* содержать не будет. В случае отсутствия в запросе Access-Control-Request-Method Access-Control-Allow-Methods не выставляется.
Access-Control-Allow-Headers выставляется равным содержимому заголовка Access-Control-Request-Headers в случае его наличия, наличия заголовка запроса Access-Control-Request-Method и попадания всех заголовков в список простых (Accept, Accept-Language, Content-Type, Content-Language) либо в список, заданный пользователем. Если хотя бы один заголовок не попадает в список разрешенных - ответ заголовков Access-Control-* содержать не будет. В случае отсутствия в запросе Access-Control-Request-Method и Access-Control-Request-Headers Access-Control-Allow-Headers не выставляется.
Заголовок Access-Control-Max-Age выставляется в соответствии с заданным пользователем, по умолчанию не выставляется.
Дополнительные заголовки ответа, определяемые клиентом, добавляются/переопределяются после отработки модуля CORS и, например, Access-Control-Alow-Origin: * в секции заголовков будет добавлен вне зависимости от результатов работы модуля CORS.
Процесс конфигурации модуля
По умолчанию проверка CORS активна. В случае отключения CORS авторизации все preflight запросы будут перенаправляться на ваш ориджин. Заголовки, описанные выше и выставленные на ориджине, не будут затронуты и передадутся конечным пользователям без изменений.
Вы можете внести корректировки в работу модуля, задав следующие параметры:
Разрешенные домены (по умолчанию не проверяется, все домены разрешены)
Значение можно задавать одним из следующих способов:
- example.com - точное соответствие
- *.example.com - все поддомены example.com, не включая example.com
- .example.com - все домены 3го уровня, включая example.com
- ~a\d+\.example.com - регулярное выражение
Безопасные заголовки запроса
По умолчанию разрешены Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma. Вы можете дополнить этот список своими заголовками.
Заголовки, доступные API верхнего уровня (Expose Headers)
По умолчанию разрешены Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma. Вы можете дополнить этот список своими заголовками.
Безопасные методы
По умолчанию разрешены GET, HEAD, POST. Вы можете дополнить этот список своими методами.
Заголовок Access-Control-Allow-Credentials
Cookies, сессионность, авторизация несовместимы с кеширующими сервисами ввиду логики своей работы. Однако, если у Вас возникает необходимость выставить заголовок Access-Control-Allow-Credentials, Вы можете сделать это.
Время жизни ответа Preflight запроса
Время, в течение которого результат ответа Preflight запроса считается актуальным.
Внимание!
Вне зависимости от включения/выключения CORS авторизации и результатов ее работы Вы можете вручную переопределить любой из заголовков в ответе конечным пользователям. Для этого укажите его название и желаемое значение в секции "Заголовки". Значение авторизационных заголовков будет заменено на указанное вами после этапа проверки CORS.
Ограничения раздачи
Ограничения для определенного пути(правила) активируются аналогично ограничениям для всего ресурса.
Авторизация
В этом разделе Вы можете настроить локальную (на основе подписи), либо внешнюю авторизацию для ограничения доступа к вашему контенту.
Прочее
Сжатие Brotli $
Данная опция позволяет включить сжатие brotli.
Brotli — это алгоритм сжатия данных без потерь с открытым исходным кодом, предложенный компанией Google в 2015 году. Он использует словарь с часто встречающимися последовательностями строк в текстовых файлах (напр. .css, .js), что позволяет достичь для них в среднем на 20% большей степени сжатия в сравнении с gzip. Может подключаться как для всего ресурса в целом, так и по правилам для конкретных путей через интерфейс ЛК. Возможна работа только по HTTPS.
Сжатие возможно для следующих типов файлов:
- application/javascript
- application/json
- application/vnd.apple.mpegurl
- application/vnd.ms-fontobject
- application/x-font-opentype
- application/x-font-truetype
- application/x-font-ttf
- application/x-javascript
- application/xml
- application/xml+rss
- font/eot - font/opentype
- font/otf - image/svg+xml
- image/vnd.microsoft.icon
- image/x-icon
- text/compressible
- text/css
- text/javascript
- text/xml
Для корректной работы сжатия браузер должен посылать заголовок Accept-Encoding: br
(поддерживается в браузерах на базе Chrome 49+, Firefox 44+, Opera 36+).
Оптимизация и модификация изображений
Оптимизация и модификация изображений для определенного пути(правила) работают аналогично опции для всего ресурса.
Конвертация видео
Активируйте данную услугу, если у Вас видео в формате MP4-файла, а Вам требуется его раздача по стриминговым протоколам HLS или MPEG-DASH. Услуга может быть включена для всего ресурса, либо для определенного пути (правила).
Важно
- Данная опция несовместима с опцией "Оптимизация и модификация изображений". Если вам требуется использовать обе опции, то необходимо включить их для разных правил (путей к файлам).
- Мы не поддерживаем контейнер Fragmented MP4 для данной услуги. Проверить контейнер файла вы можете с помощью команды
MP4Box -info test.mp4
Описание запросов для просмотра MP4-файлов с использованием стриминговых протоколов можно найти на вкладке "Инструкция по настройке" на странице редактирования ресурса.