Cross-Origin Resource Sharing
Cross-Origin Resource Sharing (CORS) ist ein Mechanismus, der Webbrowsern oder auch anderen Webclients Cross-Origin-Requests ermöglicht.[1] Zugriffe dieser Art sind normalerweise durch die Same-Origin-Policy (SOP) untersagt. CORS ist ein Kompromiss zugunsten größerer Flexibilität im Internet unter Berücksichtigung möglichst hoher Sicherheitsmaßnahmen.
Funktionsweise
Die Einschränkungen, die durch die SOP auferlegt sind, können vom jeweiligen Server, der angefragt wird, für bestimmte Clients aufgehoben werden.
Damit die Anfrage eines Scripts auf einer Webseite, z. B. http://foo.example
, an einen Server einer abweichenden Domain, z. B. http://bar.example
, erfolgreich durchgeführt werden kann, muss der referenzierte Server bei seiner Antwort den Zugriff durch entsprechende HTTP-Header erlauben.
Sendet bar.example
den unten aufgeführten Header Access-Control-Allow-Origin
, so erlaubt er dem Server foo.example
den Zugriff auf Ressourcen, die auf ihm (bar.example
) gespeichert sind. Ein Cross-Origin-Request kann somit erfolgreich durchgeführt werden. Zugriffe auf andere Server werden aufgrund der SOP weiterhin nicht erfolgreich durchgeführt.
HTTP-Header, gesetzt durch den Server bar.example
(Beispiel):
Access-Control-Allow-Origin: http://foo.example
Weitere Access-Control-*
-Header können das Zugriffsverhalten zusätzlich einschränken und die Sicherheit somit erhöhen, um den Server vor unberechtigten Anfragen zu schützen.
CORS-Ressource, die ausschließlich über die HTTP-GET Methode erreichbar ist:
Access-Control-Allow-Methods: GET
Browser-Unterstützung
CORS wird von folgenden Rendering-Engines unterstützt:
- Gecko 1.9.1+ (Mozilla Firefox 3.5+,[2] SeaMonkey 2.0+[3]).
- WebKit (Apple Safari 4+,[4] Google Chrome 3+[5])
- MSHTML/Trident 4.0+ (Internet Explorer 10+[6], Internet Explorer 8 und 9 bieten teilweise Unterstützung durch das XDomainRequest-Objekt.[4])
- Presto 2.10.232+[7] (Opera 12+[8])
CORS vs. JSONP
CORS kann als Alternative für JSONP genutzt werden. Während JSONP nur GET-Anfragen unterstützt, bietet CORS auch Unterstützung für andere HTTP-Anfragen. Mit der Verwendung von CORS ist es Webentwicklern möglich, normale XMLHttpRequests bzw. die JavaScript Fetch API zu benutzen, die eine bessere Fehlerbehandlung als JSONP bieten. Auf der anderen Seite wird JSONP auch von Browsern unterstützt, die keine CORS-Unterstützung bieten.
Einzelnachweise
- Arbeitsvorlage des W3C, Stand 16. Januar 2014 (englisch)
- Cross-Origin Resource Sharing (CORS). In: Mozilla Developer Network. Abgerufen am 5. Juni 2018.
- Gecko. In: Mozilla Developer Network. Abgerufen am 2. Juni 2015.
- cross-site xmlhttprequest with CORS. In: Mozilla Hacks – the Web developer blog. Abgerufen am 2. Juni 2015.
- Archivierte Kopie (Memento des Originals vom 19. Juli 2012 im Webarchiv archive.today) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- MSDN Blogs. In: blogs.msdn.com. Abgerufen am 2. Juni 2015.
- Opera Software: Web specifications support in Opera Presto 2.10. Abgerufen am 2. Juni 2015.
- Dev.Opera – Hello Opera 12! In: dev.opera.com. Abgerufen am 2. Juni 2015.
Weblinks
- Enable CORS (englisch)
- Mozilla Developer Network – Benutzer-Guide mit Anwendungsbeispielen (englisch)
- MSDN XDomainRequest Object – Beschreibung des Objektes (englisch)
- CORS im Zusammenhang mit CDNs (englisch)