Под HTTP-контентом понимаются статические изображения, HTML-файлы, CSS-таблицы, Java-скрипты, видеофайлы и прочие объекты, используемые при создании веб-сайтов. Основной принцип – контент по мере необходимости кэшируется на серверах раздачи и отдаётся с оптимального сервера по запросу пользователя. При кэшировании сохраняется не только сам объект данных, но и связанные с ним HTTP-заголовки, что позволяет кэшировать как статический, так и динамически генерируемый контент.
Контент загружается по протоколу HTTP в кэш сервера раздачи с сервера-источника при первом запросе пользователя и используется при обслуживании последующих запросов. Полученный сервером раздачи объект хранится в кэше в течение определенного времени. В случае заполнения кэша происходит замещение объектов по принципу ротации, то есть в первую очередь замещаются объекты с наибольшим сроком хранения. Повторная загрузка из источника происходит только в случае отсутствия запрашиваемого объекта в кэше сервера раздачи.
Алгоритм кэширования
Характерные особенности:
- кэшируются только избранные объекты;
- необходимо менять ссылки на сайте для кэшируемых объектов.
Как это работает. Допустим, на вашем сайте www.mycompany.com есть картинка с полным URL вида http://www.mycompany.com/images/logo.gif. Вам будет выделено доменное имя вида customer.probro.ru для модификации доменной части ссылок на кэшируемые объекты. Таким образом, новая ссылка на картинку будем выглядеть так:
http://customer.probro.ru/images/logo.gif
Обратите внимание, что относительный путь объекта не изменился. Обращение пользователя к такому объекту на сайте попадёт на один из серверов раздачи. Если это обращение было первым, объект будет запрошен с сервера-источника, транслирован пользователю и сохранён в кэше для обслуживания последующих запросов.
Управление временем кэширования
Время хранения объекта в кэше сервера раздачи определяется HTTP-заголовками Cache-Control (со значением ‘max-age’) и Expires. Заголовки должны выставляться на сервере-источнике; достаточно указать только один из них. Одновременное использование обоих заголовков не запрещается, хотя и является избыточным; в этом случае следует проследить, чтобы их значения не противоречили друг другу. Если эти заголовки отсутствуют, то по умолчанию время хранения объекта в кэше принимается равным 24-м часам. Следует особо обратить внимание на правильное выставление указанных HTTP-заголовков в случае динамически меняющегося контента, поскольку это напрямую влияет на актуальность версии объекта, хранящегося в кэше.
Высокого уровня актуальности динамического контента можно добиться, используя API сети CDN для удаления отдельных объектов из кэша всех серверов раздачи. В этом случае объект будет загружен из источника заново при первом обращении пользователя.
Обработка query string
При раздаче объектов с URL, содержащими строку параметров (query string) вида:
http://server/path/program?query_string
следует учесть, что по умолчанию при кэшировании такого объекта ‘query string’ удаляется из HTTP-заголовка Request URI. При последующих запросах пользователям будет выдаваться первый закэшированный объект с таким URL, без учёта значения ‘query string’ в запросе. Если такая модель работы не устраивает и сохранение ‘query string’ в URL необходимо – сообщите нам об этом и мы активируем эту опцию.
Псевдостримминг видеофайлов
В нашей сети поддерживается псевдостримминг видеофайлов по протоколу HTTP, технология также известна как HTTP Progressive Download. Поддерживаемые контейнеры видео – MP4 и FLV.
Для поиска по ролику поддерживаются следующие методы:
- С использованием аргумента start в строке запроса. Время указывается в секундах. Пример URL – http://customer.probro.ru/filetoplay.mp4?start=300
- Запрос части файла с указанием байтового диапазона (byte-range request).
Первый запрос, когда файла ещё нет в кэше сервера раздачи, не будет иметь возможности поиска по ролику и видео будет проигрываться с начала. В процессе закачки файла в кэш, на источник будут направляться все запросы с аргументом start (запрос на “перемотку” до указанной секунды).
Требования к видеофайлам – использование расширения .mp4 или .flv для MP4- и FLV-файлов соответственно. Также рекомендуется подготовить файлы для псевдостримминга, а именно, правильно выставить ключевые кадры (key frames) при кодировании и вынести метаданные в начало файла. Более подробно об этом можно прочитать по ссылкам:
http://flash.flowplayer.org/plugins/streaming/pseudostreaming.html#prepare
http://nginx.org/ru/docs/http/ngx_http_mp4_module.html
Поддерживается опция ограничения скорости отдачи трафика пользователю при псевдостримминге, что позволяет контролировать объём передаваемого трафика. По умолчанию скорость отдачи не ограничивается.
Порядок действий при подключении
- Сообщите нам полное доменное имя источника контента.
- Определите и сообщите нам необходимые исходные данные (перечислены ниже).
- Настройте на сервере-источнике корректную передачу HTTP-заголовков Cache-Control и Expires.
- Для размещения ссылок на контент вам будет выделен домен в зоне ответственности CDN вида customer.probro.ru. Для этого домена вы можете создать псевдоним (CNAME) в своей зоне ответственности DNS вида cdn.mycompany.com (опционально).
- После получения подтверждения от службы технической поддержки проверить корректность загрузки веб-контента на тестовом объекте/домене.
- Для кэшируемых объектов разместить на своем сайте ссылки с использованием выделенного доменного имени в зоне ответственности CDN (или псевдонима, указанный в записи CNAME).
Необходимые исходные данные:
- Общий объем веб-контента, подлежащего распространению (в случае, если этот объем превышает 100 Мбайт). В соответствии с этим значением для вас будет определён размер кэша на каждом сервере раздачи. По умолчанию выделяется 100 Мбайт.
- Время хранения объектов, для которых не выставлен заголовок Cache-Control или Expires. По умолчанию такой контент хранится в кэше 24 часа.
- В случае раздачи видеофайлов по протоколу HTTP (HTTP Progressive Download, псевдостримминг) – определить необходимость ограничения скорости отдачи и указать значение, если такая необходимость есть. По умолчанию скорость отдачи не ограничивается.
- Если вы используете строку параметров (query string) в URL объектов, сообщите нам, следует ли кэшировать такие объекты с полными URL, включающими строку параметров. По умолчанию ‘query string’ удаляется из URL кэшируемых объектов.