Перейти к содержанию

HTTP кеширование

C помощью данной услуги Вы можете значительно увеличить скорость загрузки таких статических объектов как картинки, видеофайлы, аудиофайлы, css, JS, любые документы и др., что сократит время отклика сайта и повысит надежность доступа к нему. Посетители сайта смогут моментально загрузить даже самые «тяжелые» страницы.

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

Создание HTTP ресурса

Для начала работы необходимо создать ваш первый ресурс. Для этого слева в боковом меню нажмите на пункт CDN вкладку "HTTP кеширование", а затем в правом верхнем углу нажмите "СОЗДАТЬ РЕСУРС".

После этого откроется диалоговое окно, в котором важно указать корректные данные, чтобы сервис работал без нареканий. Введите произвольное название ресурса (на английском).

Настройка HTTP ресурса

Источник данных

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

В качестве источника могут выступать:

Обратите внимание

Если у Вас несколько источников контента (primary/backup), то Вы можете настроить приоритетность каждого. В случае, если источник с "первым приоритетом" будет недоступен, то сеть CDN автоматически переключится на следующий источник. Обратное переключение на приоритетный источник произойдёт автоматически, когда он будет снова работать в штатном режиме.

Вы можете выбрать использование HTTPS при запросе к источникам, выбрав соответствующую опцию.

Если Вы используете хостинг на таких сервисах как: Wix, Amazon S3, Selectel и т.д., обратите, пожалуйста, особое внимание на раздел Hostname.

У многих виртуальных хостингов (таких как Amazon S3) есть практика обслуживания нескольких сайтов с одного веб-сервера. Чтобы узлы сети CDN могли достучаться до вашего контента, Вам нужно указать корретный Hostname.

Если Вы не знаете свой Hostname или не знаете где его найти, попробуйте воспользоваться этим сервисом. Укажите домен своего сайта и на вкладке "Информация" посмотрите поле "Имя ресурса".

Порядок действий, если Вы не знаете свой Hostname:

  1. Зайдите на свой сайт и скопируйте ссылку на любую картинку, кликнув по ней правой кнопкой.
  2. Вставьте ссылку в новом окне браузера. Полученный домен и будет являться Источником контента для вашего сайта. Например, если у Вас сайт размещён на Wix, источником контента будет выступать домен static.wixstatic.com
  3. Зайдите на ресурс https://check-host.net и укажите домен вашего сайта (не источника контента).
  4. На вкладке "Информация" посмотрите на "Имя ресурса" — это и есть ваш Hostname. Например, если у Вас хостинг на Amazon, то Hostname может иметь вид: ec7-54-151-126-156.eu-west-1.compute.amazonaws.com
  5. Укажите полученный Hostname в личном кабинете.

SSL-сертификат

По умолчанию, после сохранения настроек, ваш контент будет доступен по HTTPS и будет иметь следующий вид https://example.a.trbcdn.net. Если в дальнейшем Вы планируете скрыть использование CDN, настроив CNAME, и у Вас есть свой сертификат, то первым шагом до создания ресурса нужно загрузить свой сертификат и потом выбрать его из доступных, при создании ресурса.

Обратите внимание

Если Вы начали создавать ресурс и не хотите терять уже заполненные данные, свой сертификат можно загрузить позже, после создания ресурса, затем прикрепив его к ресурсу.

Желаемый CNAME

CNAME-запись позволяет присваивать хосту псевдоним. Этот псевдоним обычно связывает с хостом какую-нибудь функцию, либо просто сокращает его имя.

По умолчанию ваш контент будет доступен по example.a.trbcdn.net/images/1.jpg, но Вы можете настроить доступ к своему контенту по адресу cdn.example.ru/images/1.jpg. Для этого нужно создать CNAME-запись по приведенной ниже инструкции. Запись следует создать на тех серверах, на которые делегирован ваш домен.

  1. Откройте страницу управления DNS на сайте компании, предоставляющей Вам услуги DNS-хостинга.

  2. Создайте CNAME-запись со следующими значениями полей (в разных панелях управления названия полей могут отличаться):

    • Имя (Хост) — "cdn".

      В некоторых панелях управления в качестве имени записи требуется указывать полное имя поддомена, например, cdn.example.ru.

    • Значение — example.a.trbcdn.net..

  3. Подождите, пока изменения в DNS вступят в силу. Этот процесс может занять до 72 часов.

Дополнительные настройки

Следовать редиректам

По умолчанию кешируются только ответы с кодами "301 Moved Permanently"/"302 Found" при их получении от вашего ориджина. Активируйте эту опцию для возможности перехода по адресам редиректа и кэширования контента.

Использовать HTTP2

По умолчанию поддерживается протокол HTTP/2.0. Отключите эту опцию, если поддержка данного протокола не требуется.

Использовать только современные версии TLS

По умолчанию используются все версии протокола TLS, но Вы можете подключить использование исключительно новых версий протокола TLS (v1.2, v1.3).

Параметры HTTPS

По умолчанию ваш контент будет доступен с узлов CDNvideo как по протоколу HTTP, так и по протоколу HTTPS. Но Вы можете настроить автоматическое перенаправление, используя опцию "Автоматически перенаправлять HTTP на HTTPS". Если Вы хотите использовать только протокол HTTPS - активируйте опцию "Использовать только HTTPS".

Обратите внимание

Если Вы включили доступ к контенту только по HTTPS, то на все запросы по HTTP будет возвращен ответ с кодом "403 Forbidden" (запрет доступа).

Поисковая индексация

Внимание!

По умолчанию мы исключаем из индексации CDN-ссылки, чтобы поисковые роботы не видели "зеркало" вашего сайта. Если робот поймает "зеркало" вашего сайта — это может привести к исключению сайта из индексации. Только опытным пользователям рекомендуется работать с этим разделом.

При помощи этой настройки Вы можете тонко настроить индексацию вашего контента поисковыми роботами. Можно настроить проксирование вашего файла robots.txt или загрузить его со своего устройства к нам на портал. Перед проксированием или загрузкой вашего robots.txt мы рекомендуем сперва проверить правильность его заполнения на специальном ресурсе.

Время кэширования контента

Здесь Вы можете указать время кэширования в зависимости от кода ответа (2xx, 3xx) и установить игнорирование заголовков управления кэшированием ("Expires" и "Cache-Control").

Query String

При включении этой опции при кэшировании контента будут учитываться параметры в ссылке вида: site.ru/img/1.jpg?id=3

Авторизация

Локальная авторизация (на основе подписи)

Решение о доступе к ресурсу принимается средствами нашей сети на основе критериев, обозначенных владельцем контента. В данном случае авторизация запросов пользователей выполняется исключительно в сети CDNvideo, внешние ресурсы не используются. В момент обращения пользователя к защищённому ресурсу владельцу контента необходимо сформировать специальную ссылку.

Пример:

http://example.a.trbcdn.net/path/to/file?md5=SMsM5ezVQp79ikyjz9tjUw&e=1387984516

Ссылка содержит два авторизационных параметра:

  • ‘md5=’ — хэш MD5 в формате Base64 for URL, сгенерированный на основе URI запрошенного ресурса, времени жизни ссылки, секретного ключа, IP-адреса пользователя (опционально);
  • ‘e=’ — время окончания действия ссылки в формате POSIX time (необязательный параметр).

При обращении к контенту с использованием сгенерированной ссылки, CDN вычисляет значение MD5 и сравнивает его с полученным. Если значение MD5 не совпадает, то пользователю возвращается ответ с кодом ‘403 Forbidden’ (запрет на воспроизведение).

Если текущее время превышает значение “e” (expires), то пользователю возвращается ответ с кодом ‘410 Gone’ (целевой ресурс больше недоступен).

Пример алгоритма расчета MD5-хэша с использованием IP-адреса пользователя в качестве одного из входных параметров:

md5 = base64_url(md5(SECRET/path/to/file1.2.3.4expiretime))

Пример алгоритма расчета MD5-хэша, если IP-адрес не учитывается:

md5 = base64_url(md5(SECRET/path/to/fileexpiretime))

Обратите внимание

Доменная часть URI при вычислении хэша не используется!

Обратите внимание

Можно подписывать часть пути (например, для /path/to/file можно подписать сам файл, /path/to, /path)

Пример генерации ссылки:

  1. Есть следующие входные данные:

  2. Вычисляем время действия ссылки. В приведённом примере – неделя с момента генерации.

    $ php -r 'print time() + (7 * 24 * 60 * 60) . "\n";'
    1387984516
    

  3. Вычисляем хэш MD5 в формате Base64 for URL:
    $ php -r 'print str_replace("=", "",strtr(base64_encode(md5("zah5Mey9Quu8Ea1k/path/to/file1.2.3.41387984516", TRUE)), "+/", "-_")) . "\n";'
    SMsM5ezVQp79ikyjz9tjUw
    
  4. Итоговая ссылка:

    http://example.a.trbcdn.net/path/to/file?md5=SMsM5ezVQp79ikyjz9tjUw&e=1387984516

Внимание!

Хэш MD5, вычисленный для HTTP, является базовым для данного ресурса. То есть, один и тот же хэш будет использован для ссылок на файл по протоколам HTTP, HTTPS несмотря на то, что URI для разных протоколов может немного отличаться.

При локальной авторизации контролируются следующие параметры:

  1. URI запрашиваемого ресурса. Проверяется, что ссылка была сформирована именно для этого файла.
  2. Секретный ключ. Проверяется, что ссылка сформирована именно владельцем контента.
  3. Время окончания действия ссылки (опционально). Вы можете отключить проверку, выбрав опцию "Не ограничивать по времени".
  4. IP-адрес пользователя (опционально). Проверяется, что ресурс запрошен именно с того IP-адреса, для которого была сформирована ссылка. Вы можете отключить проверку, выбрав опцию "Не учитывать IP адрес".
Внешняя авторизация

Внешняя авторизации предназначена для возможности ограничения доступа к ресурсу с произвольной логикой, описанной в вашем скрипте авторизации.

Решение о доступе к контенту принимается на основе ответа вашего скрипта, ссылку на который Вы указываете в личном кабинете при создании/редактировании ресурса.

Если от скрипта авторизации пришел ответ со статусом 200, то доступ к контенту разрешен. В противном случае - доступ запрещен.

Авторизационному скрипту передаются следующие заголовки:

  • Host: содержит имя домена, для которого предназначен запрос;
  • X-Request-URI: содержит URI запрашиваемого ресурса;
  • X-Forwarded-For: содержит реальный IP-адрес пользователя, который запрашивает ресурс;
  • X-Remote-Addr: содержит IP-адрес пользователя, который запрашивает ресурс, или прокси-сервера.

Сжатие 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+).

Оптимизация изображений (WebP)

Данная услуга позволяет конвертировать изображения из форматов JPEG, GIF, PNG (.jpg, .jpeg, .png, .gif) в формат WEBP (.webp) на лету. WebP — это формат, предложенный Google в 2010 году, на текущий момент поддерживается основными браузерами. Он использует продвинутый алгоритм сжатия, позволяющий уменьшить размер для некоторых изображений без видимых потерь в качестве.

При наличии заголовка Accept: image/webp в запросе пользователя, происходит преобразование исходного изображения — пользователь получает ответ с Content-Type: image/webp. Если же заголовок Accept пустой, содержит другое значение или же отсутствует, то конвертации не происходит, и в ответ на запрос пользователь получает оригинальное изображение.

Перед включением опции с Вами свяжется менеджер.

Модификация изображений

Данная опция позволяет модифицировать размер и качество изображений. Может сочетаться с услугой Оптимизация изображений (WebP).

Обрабатываются только файлы изображений с расширениями jpeg, jpg, gif, png и webp.

URI вида /ioss(resize=...)/ и /ioss(quality=...)/ интерпретируются как специальные и не передаются на источник.

Новый размер задаётся в запросах от пользователя в качестве значения параметра resize= в виде <width>x<height>, либо <width>, либо x<height>. В двух последних случаях вторая размерность вычисляется исходя из соотношения сторон исходного изображения. Изменение размера без потерь возможно только в меньшую сторону. Размерности и задаются целыми числами.

Качество определяется значением параметра quality=<value>. Значение задаётся целым числом в диапазоне 1-100. Чем больше число, тем выше качество.

В результате преобразования пользователь получает модифицированное изображение.

Если специальные URI отсутствуют в пути к изображению при запросе, то пользователь получает оригинальное изображение.

Перед включением опции с Вами свяжется менеджер.

Конвертация видео

Активируйте данную услугу, если у Вас видео в виде MP4-файла, а Вам требуется его раздача по стриминговым протоколам HLS, MSS или MPEG-DASH.

Перед включением опции с Вами свяжется менеджер.

Защита видео от пиратов (DRM)

Активируйте услугу, если планируете использовать технические средства защиты авторских прав, которые ограничивают пиратский доступ к видео - DRM (Digital Rights Management).

Перед включением опции с Вами свяжется менеджер.

Правила

Данный раздел предназначен для более тонкой настройки работы CDN-сети. После создания ресурса на странице его редактирования появится вкладка "Правила". В данной вкладке можно редактировать базовое правило (которое распространяется на весь ресурс), либо создавать индивидуальные правила для какого-либо раздела/пути. Правила позволяют управлять заголовками, кэшированием, CORS и авторизацией.

Основное

Укажите путь до директории или к конкретному файлу, к которому нужно применить данное правило.

Заголовки

В этом разделе Вы можете указать специальные заголовки, которые требуется добавить при обращении к источнику данных (вид "to origin"), либо при раздаче контента конечным пользователям (вид "to customer").

Таймауты

В этом разделе Вы можете указать допустимые таймауты при обращении узлов CDN к вашему ориджину. В случае, если фактические значения начнут превышать допустимые — произойдёт переключение на другой источник контента, указанный в разделе Источник данных.

Кэширование

В этом разделе Вы можете указать время кэширования в зависимости от кода ответа (2xx, 3xx, 4xx, 5xx), установить игнорирование заголовков управления кэшированием ("Expires" и "Cache-Control"), а также включить учет query string при кэшировании.

CORS

Описание

В определённых случаях обращение к контенту, размещённому в сети CDN, расценивается браузером как кросс-доменный запрос и блокируется. В первую очередь это касается шрифтов. Проблема решается выставлением заголовков CORS (Cross-Origin Resource Sharing) для кэшируемых объектов.

Вариантов два:

  1. Вы сами выставляете заголовки CORS на сервере-источнике и отключаете их проверку в нашей сети.
  2. Вы настраиваете проверку CORS через наш личный кабинет.

Настройка через личный кабинет

Механизм проверки CORS, предоставляемый для конфигурации, основывается на работе нашего собственного модуля. Его функциональность базируется на рекомендациях W3C.

Основные принципы работы модуля:

  1. При включенном CORS заголовки Access-Control-* от ориджина не учитываются ни при каких условиях и удаляются из ответа.

  2. Запрос без заголовка Origin не является кросс-ресурсным и заголовки Access-Control-* клиенту не передаются.

  3. Заголовки Access-Control-Request-* не добавляются нашим модулем ни при каких условиях, т.к. это входящие заголовки запроса, формируемые браузером, как и Origin.

  4. При наличии заголовка Origin его содержимое проверяется на соответствие с заданным пользователем. В случае отсутствия ограничений заголовок Access-Control-Allow-Origin ответа будет содержать "*", в случае наличия ограничений и попадания Origin в список разрешенных ACAO будет содержать http(s?)://${http_origin}, в любом другом случае ответ заголовков Access-Control-* содержать не будет.

  5. Заголовок Access-Control-Expose-Headers добавляется в том случае, если такие заголовки заданы пользователем. По умолчанию мы проставляем разрешение на доступ к Content-Range для работы range-запросов (для плееров на JS).

  6. Заголовок Access-Control-Allow-Credentials (ACAC) выставляется в соответствии с заданным пользователем.

  7. Заголовки Access-Control-Allow-Methods, Access-Control-Allow-Headers и Access-Control-Max-Age проставляются только в ответе на запрос с методом OPTIONS.

  8. Заголовок Access-Control-Allow-Methods выставляется равным содержимому заголовка Access-Control-Request-Method в случае его наличия и попадания его содержимого в список простых запросов (GET, HEAD, POST), либо в список, заданный пользователем. Если метод не попадает в список разрешенных - ответ заголовков Access-Control-* содержать не будет. В случае отсутствия в запросе Access-Control-Request-Method Access-Control-Allow-Methods не выставляется.

  9. 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 не выставляется.

  10. Заголовок Access-Control-Max-Age выставляется в соответствии с заданным пользователем, по умолчанию не выставляется.

  11. Дополнительные заголовки ответа, определяемые клиентом, добавляются/переопределяются после отработки модуля CORS и, например, Access-Control-Alow-Origin: * в секции заголовков будет добавлен вне зависимости от результатов работы модуля CORS.

Процесс конфигурации модуля

По умолчанию проверка CORS активна. В случае отключения CORS авторизации все preflight запросы будут перенаправляться на ваш ориджин. Заголовки, описанные выше и выставленные на ориджине, не будут затронуты и передадутся конечным пользователям без изменений.

Вы можете внести корректировки в работу модуля, задав следующие параметры:

Разрешенные домены (по умолчанию не проверяется, все домены разрешены)

Значение можно задавать одним из следующих способов:

  1. example.com - точное соответствие
  2. *.example.com - все поддомены example.com, не включая example.com
  3. .example.com - все домены 3го уровня, включая example.com
  4. ~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+).

GZip-сжатие

По умолчанию мы сжимаем некоторые типы файлов, чтобы ускорить загрузку вашего сайта. Ниже перечислены типы файлов:

  • application/javascript
  • application/json
  • 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