По просьбе популярного видеохостинга мы добавили в личный кабинет новую опцию защиты контента.
У клиента была проблема: конкуренты копировали и воспроизводили уникальный видеоконтент в собственных плеерах на своих сайтах. Требовалось ограничить доступ к контенту.
Что мы предложили?
Для новой функции использовали технологию CORS (Cross-Origin Resource Sharing), которая ограничивает предоставление контента браузерам при отсутствии в запросе нужного заголовка. Плееры конкурентов не смогут воспроизводить контент, если в заголовках CDN не будет заголовка CORS.
Как это работает?
На стороне CDN-сервера проверяется, совпадает ли значение заголовка Origin, с которым пришел запрос на CDN, с теми доменами, которые указаны пользователем в настройках заголовка Access-Control-Allow-Origin.
Совпадает — добавляем заголовок Access-Control-Allow-Origin со значением пришедшего в запросе $http_origin.
Не совпадает — заголовок Access-Control-Allow-Origin не добавляется к заголовкам ответа.
Какие задачи мы решили?
1. Добавить CORS-заголовок
CORS-заголовок используется для защиты контента от встраивания на сторонних доменах. Мы не могли использовать Политику доступа по доменам, так как даже если разрешить встраивание для определённых доменов, то без CORS-заголовка контент всё равно не воспроизведётся.
2. Предусмотреть возможность выборочного добавления CORS-заголовка
Для клиента было важно, чтобы проверка, добавлять или не добавлять заголовок в зависимости от домена, происходила на стороне CDN-сервера. Поэтому мы реализовали новую опцию, которая снимает оба ограничения.
Заголовок добавляется только к заранее определённому списку доменов и не добавляется при запросах от других доменов. (Добавление заголовка через опцию «Кастомные заголовки» невозможно, поскольку в этом случае заголовок с заданным значением будет добавляться ко всем запросам.)
Опция позволяет добавить заголовок Access-Control-Allow-Origin для всех запросов или запросов с выбранных доменов (не более пяти).
Опция доступна в общих настройках CDN-ресурса и в разделе «Правила».