Was ist CORS (Cross-Origin Resource Sharing)?

Mechanismus, der Anfragen an andere Ursprünge und das Lesen ihrer Antworten, die die Same-Origin-Policy einschränkt, in dem vom Server erlaubten Umfang zulässt. Der Server gibt mit Antwort-Headern wie Access-Control-Allow-Origin an, welche Ursprünge die Antwort lesen dürfen. Bei Anfragen, die ein einfaches Formular nicht erzeugen kann, etwa einem POST mit dem Content-Type application/json, sendet der Browser zuerst mit der Methode OPTIONS eine Vorabprüfung (Preflight). CORS ist eine Regel, die der Browser einhält, kein Mechanismus, der den Server vor Angriffen schützt.

Japanische Bezeichnung: CORS(オリジン間リソース共有)

„CORS (Cross-Origin Resource Sharing)“ kommt in 1 Übungsfragen aus 1 Themen vor, z. B. Grundlagen der Webtechnologien.

Fachgebiet: Grundlagen der Webtechnologien

Einfache Anfragen und Preflight

GET-Anfragen und POST-Anfragen in Formaten, die ein Formular senden kann (application/x-www-form-urlencoded, multipart/form-data, text/plain), werden ohne Prüfung gesendet; Access-Control-Allow-Origin entscheidet nur darüber, ob das Skript die Antwort lesen darf. Bei Anfragen mit anderen Methoden oder Content-Types oder mit eigenen Headern sendet der Browser zuerst OPTIONS und teilt in Headern wie Access-Control-Request-Method die Methode und die Header mit, die er verwenden will. Gibt der Server die Erlaubnis zurück, sendet der Browser die eigentliche Anfrage.

Cookies mitsenden

Um Cookies mit einer Anfrage an einen anderen Ursprung zu senden, muss das Skript credentials angeben, und der Server muss Access-Control-Allow-Credentials: true zurückgeben. In diesem Fall darf Access-Control-Allow-Origin nicht der Platzhalter * sein; der erlaubte Ursprung muss ausdrücklich angegeben werden. Werden zu viele Ursprünge erlaubt, können andere Websites unter Umständen die Informationen des Nutzers lesen.

Häufige Missverständnisse

Ein CORS-Fehler bedeutet, dass der Browser die Antwort nicht an das Skript übergeben hat; die Anfrage selbst kann den Server bereits erreicht haben. Außerdem ist CORS eine Regel, die Browser einhalten, und hält daher keine Anfragen von Kommandozeilenwerkzeugen oder anderen Servern auf. Um die Daten des Servers zu schützen, sind zusätzlich Authentifizierung und Berechtigungsprüfungen nötig.

Jetzt üben: Fragen zu CORS (Cross-Origin Resource Sharing)

JavaScript auf einer Seite unter https://app.example.com will mit fetch eine POST-Anfrage mit einem Body vom Content-Type application/json an https://api.example.net/orders senden. Welche Aussage über das Verhalten von CORS in diesem Fall ist richtig?

  1. ACORS wirkt auch außerhalb von Browsern; ohne Erlaubnis des Servers wird daher auch ein mit einem Kommandozeilenwerkzeug gesendeter POST unterwegs im Netz gestoppt
  2. BDer Browser sendet zuerst mit der Methode OPTIONS eine Vorabprüfung (Preflight) und sendet den eigentlichen POST nur, wenn der Server in seinen Headern die Erlaubnis zurückgibt
  3. CAnfragen an einen anderen Ursprung werden immer ohne Prüfung gesendet, und das JavaScript der Seite kann die Antwort lesen, auch wenn der Server ihr nichts hinzufügt
Antwort und Erläuterung anzeigen

Antwort: B. Der Browser sendet zuerst mit der Methode OPTIONS eine Vorabprüfung (Preflight) und sendet den eigentlichen POST nur, wenn der Server in seinen Headern die Erlaubnis zurückgibt

CORS ist ein Mechanismus, der Anfragen an andere Ursprünge und das Lesen ihrer Antworten, die die Same-Origin-Policy einschränkt, in dem vom Server erlaubten Umfang zulässt. Ein POST mit dem Content-Type application/json ist eine Art von Anfrage, die ein einfaches Formular nicht erzeugen kann; deshalb teilt der Browser zuerst mit OPTIONS die Methode und die Header mit, die er verwenden will, und fragt nach der Erlaubnis. Enthält die Antwort des Servers keine Erlaubnis über Header wie Access-Control-Allow-Origin, sendet der Browser die eigentliche Anfrage nicht. CORS ist eine Regel, die der Browser einhält; der Server muss sich daher zusätzlich mit Authentifizierung und Berechtigungsprüfungen selbst schützen.

Häufige Fragen

Lässt sich ein CORS-Fehler auf der Clientseite beheben?

Nein. Welche Ursprünge die Antworten lesen dürfen, entscheidet der Server; der API-Server muss seinen Antworten daher die passenden Erlaubnis-Header hinzufügen. Bei einer API, die man nicht selbst verwaltet, kann man sie auch über den eigenen Server aufrufen.

Wie hängen Same-Origin-Policy und CORS zusammen?

Die Same-Origin-Policy verbietet grundsätzlich, Antworten anderer Ursprünge zu lesen, und CORS ist der Mechanismus, der in dem vom Server ausdrücklich angegebenen Umfang Ausnahmen davon zulässt. Gibt der Server keine CORS-Erlaubnis zurück, gilt die Einschränkung der Same-Origin-Policy unverändert.

„CORS (Cross-Origin Resource Sharing)“ in den Erläuterungen

Fragen mit „CORS (Cross-Origin Resource Sharing)“ (1)

  1. JavaScript auf einer Seite unter https://app.example.com will mit fetch eine POST-Anfrage mit einem Body vom Content-Type application/json an https://api.example.net/orders senden. Welche Aussage über das Verhalten von CORS in diesem Fall ist richtig?

Verwandte Begriffe

Same-Origin-Policy Cookie (HTTP-Cookie) DOM (Document Object Model) Event Loop HTTP (Hypertext Transfer Protocol) HTTP-Methode HTTP-Statuscode JSON (JavaScript Object Notation) JWT (JSON Web Token) OAuth

Zur Glossarübersicht