Übersicht
Cross-Origin Resource Sharing (CORS) ist ein Mechanismus, der es einer Webseite ermöglicht, Anfragen an eine andere Domain als die, von der aus die Seite bedient wurde, zu stellen. Normalerweise würden domänenübergreifende Anfragen sonst von Webbrowsern verboten. CORS definiert eine Art und Weise, wie Domänen interagieren können, um zu bestimmen, ob sie herkunftsübergreifende Anforderungen zulassen oder nicht.
CORS und Brightcove
Es gibt drei Fälle, in denen CORS mit Brightcove-Dienste/Produkten verwendet werden muss:
- Bildunterschriften für Videos: Die Datei, die Untertitel für ein Video enthält, kann in einer Nicht-BrightCove-Domäne gespeichert werden. Da das Video selbst von einer Brightcove-Domain bereitgestellt wird, führt dies zu domänenübergreifenden Problemen.
- Brightcove Spieler und HLS: Das Brightcove Player's HLS-Plugin verwendet AJAX-Anfragen, um das Manifest und die einzelnen Segmente des HLS-Videos abzurufen. Da diese HLS-Ressourcen in jeder mit dem Internet zugänglichen Domäne gespeichert werden können, werden diese Ressourcen wahrscheinlich von einem anderen Server (in der Regel einer CDN-Domain) als von der Brightcove-Domain bereitgestellt werden, die den Spieler bedient hat. Dies wird wiederum zu domänenübergreifenden Problemen führen.
- Video Standbild- und Thumbnail-Bilder: Für die Aufnahme von Videoaufzeichnungen und Miniaturbildern in Studio muss die Videowiedergabe mit CORS-Headern bedient werden (die standardmäßig auf den meisten Haus-CDNs von Brightcove aktiviert sein sollten); wenn Sie ein benutzerdefiniertes CDN haben oder eines wir haben noch nicht aktualisiert, Bilderfassung wird nicht funktionieren
Lösungen
Die Lösung, die Brightcove derzeit verwendet, beinhaltet die Konfiguration eines Access-Control-Allow-Origin
Headers in der Konfigurationsdatei des CDN-Original-Servers. Es ist wichtig zu beachten, dass die folgenden Header-Informationen als Beispiel und nicht als Drop-In-Code-Snippet angeboten werden, da verschiedene CDN-Partner unterschiedliche Serverlösungen zur Bereitstellung ihrer Inhalte verwenden.
Brightcove war mit der folgenden Header-Direktive für die Eigenschaften des hauseigenen CDN-Servers erfolgreich:
<FilesMatch ".(vtt|xml)$">
Header set Access-Control-Allow-Headers: X-Requested-With
Header add Access-Control-Allow-Origin: http://admin.brightcove.com
</FilesMatch>
Im Folgenden finden Sie kurze Erläuterungen zur Richtlinie:
<FilesMatch ".(vtt|xml)$">
: Diese Bedingung setzt denAccess-Control-Allow-Origin
Header nur für vtt- oder xml-Dateien. Tests haben bestätigt, dass dieser Header nicht mit Bildern oder anderen HTTP-Inhalten gesendet wird.Header set Access-Control-Allow-Headers: X-Requested-With
: Dieser Header ist erforderlich, damit derAccess-Control-Allow-Origin
Header funktioniert, da die Anfrage, die der Spieler stellt, ein XMLHttpRequest ist.Header add Access-Control-Allow-Origin: http://admin.brightcove.com
: Dies ist der Zugriffskontroll-Header selbst, um Inhalte aus der angegebenen Domäne zuzulassen.
Aktivieren von CORS auf Apache
Sie können in der Konfiguration von Apache-Servern einen Header festlegen, um CORS zu aktivieren. Platzieren Sie Folgendes in der entsprechenden .conf
Datei:
Header set Access-Control-Allow-Origin "*"
Im obigen Beispiel fungieren die Sternchen als Wild Card und ermöglichen den Zugriff auf alle Domains. Der Platzhalter kann auch durch eine bestimmte Domäne ersetzt werden. Das funktioniert im Allgemeinen nicht für Brightcove-Spieler, da sich Assets in vielen Fällen auf mehreren Domains befinden. Sie können andere Lösungen implementieren, um den Zugriff auf eine bestimmte Whitelist von akzeptablen Domains zu beschränken.
BYO CDN
Wenn Sie ein Kunde mit einem BYO-CDN sind und domänenübergreifende Probleme haben, wenden Sie sich an Ihr CDN, um Hilfe bei der Konfiguration von CORS für Ihr Konto zu erhalten. Hier sind die Einstellungen, die wir empfehlen:
- Access-Control-Allow-Header: X-Angefragte-mit
- Zugriff-Control-Allow-Ursprung: *
- Dateiformate: m3u8 m3u ts xml dfxp vtt mpd m4f mp4 jpg png
Anforderungen für Token-Autorisierung
Für den Fall, dass die Tokenautorisierung erforderlich ist, müssen Änderungen an der oben genannten Lösung vorgenommen werden. Im Falle einer Token-Autorisierung verbietet das CORS-Sicherheitsmodell ausdrücklich die Verwendung des *
Charakters als Wert für den Access-Control-Allow-Origin
Response-Header. Darüber hinaus ist der Access-Control-Allow-Credentials
Response-Header erforderlich und muss auf true gesetzt sein.
Eine aktualisierte Header-Direktive für die Token-Autorisierung lautet:
<FilesMatch ".(m3u8 | m3u | ts)$">
# with AJAX withCredentials=true (cookies sent, SSL allowed...)
SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1
Header set Access-Control-Allow-Origin "%{ORIGIN}e"
Header set Access-Control-Allow-Credentials "true"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]
</FilesMatch>
In den folgenden Punkten werden die Unterschiede zur früheren Lösung beschrieben:
- Die Direktive fragt die eingehende Anfrage nach dem Vorhandensein eines Origin-Headers ab, und wenn dieser Header vorhanden ist (normalerweise), legt seinen Wert auf eine Variable fest, die aufgerufen wird
ORIGIN
:SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1
- Der Wert des
Access-Control-Allow-Origin
Response-Headers wird auf den Wert der gerade erstelltenORIGIN
Variable festgelegt:Header set Access-Control-Allow-Origin "%{ORIGIN}e"
- Der
Access-Control-Allow-Credentials
Header muss auf Folgendes festgelegt seintrue
:Header set Access-Control-Allow-Credentials "true"
HLS und CORS
In einigen Umgebungen (wie Amazon S3) können Sie eine CORS-Konfiguration für HLS angeben. Im Folgenden wird CORS so konfiguriert, dass die HLS-Wiedergabe ermöglicht wird.
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
Weitere Informationen zu Amazon S3 finden Sie unter Aktivieren der Cross-Origin Resource Sharing.
Obwohl es tangential zu CORS ist, muss der Clientbrowser alle Sitzungscookies akzeptieren, damit die Token-autorisierte HLS-Inhaltsbereitstellung ordnungsgemäß funktioniert. Während einige Client-Browser, wie Google Chrome und Mozilla Firefox, Sitzungscookies standardmäßig akzeptieren, muss diese Option bei anderen Browsern wie Internet Explorer nicht vom Benutzer aktiviert werden.