Das CORS (Cross-Origin Resource Sharing) ist ein Browser-Mechanismus, der den Zugriff einer Webanwendung auf Ressourcen einer anderen Origin kontrolliert freigibt. Er ergänzt die Same-Origin-Policy — eine grundlegende Sicherheitsregel, nach der Skripte standardmäßig nur Ressourcen ihrer eigenen Origin lesen dürfen.

Eine Origin ist das Tripel aus Schema, Host und Port. https://app.example.org und https://api.example.org sind unterschiedliche Origins, ebenso https://example.org:443 und https://example.org:8443.

Funktionsweise

Bei einem Cross-Origin-Request entscheidet nicht die Webanwendung, sondern der Server der Zielressource, ob der Zugriff erlaubt ist. Der Server signalisiert die Freigabe über Antwort-Header:

  • Access-Control-Allow-Origin — welche Origin (oder *) zugreifen darf.
  • Access-Control-Allow-Methods — welche HTTP-Methoden erlaubt sind.
  • Access-Control-Allow-Headers — welche Custom-Header der Client setzen darf.
  • Access-Control-Allow-Credentials — ob Cookies oder Authorization-Header mitgeschickt werden dürfen.
  • Access-Control-Max-Age — wie lange das Ergebnis der Vorabfrage gecacht werden darf.

Erst wenn diese Header passen, gibt der Browser die Antwort an den JavaScript-Code weiter. Andernfalls blockiert er den Zugriff — der Server hat zwar geantwortet, der Code sieht aber nichts davon.

Einfache und vorab geprüfte Anfragen

CORS unterscheidet zwei Arten von Anfragen:

  • Simple RequestsGET, HEAD oder POST mit einer kleinen Auswahl an Headern und Inhaltstypen. Der Browser sendet die Anfrage direkt und prüft nur die Antwort.
  • Preflight Requests — alles andere. Der Browser stellt zuerst eine OPTIONS-Anfrage, in der er die geplante Methode und Header ankündigt. Erst wenn der Server diese explizit erlaubt, folgt die eigentliche Anfrage.

Häufige Stolperfallen

CORS sorgt regelmäßig für Verwirrung:

  • Access-Control-Allow-Origin: * ist mit Access-Control-Allow-Credentials: true nicht kompatibel.
  • CORS schützt nicht den Server — es schützt den Nutzer davor, dass eine fremde Webanwendung in seinem Namen Daten abruft. Ein direkter Aufruf per curl oder Backend-Code unterliegt CORS gar nicht.
  • Fehlende oder falsch gesetzte Header äußern sich oft nur indirekt — der Request läuft, aber der Browser verwirft die Antwort.

Abgrenzung

CORS ist keine Authentifizierung und kein Zugriffsschutz. Wer Daten serverseitig schützen will, braucht Authentifizierung und Autorisierung. CORS regelt ausschließlich, welche Origin im Browser auf eine Antwort zugreifen darf.

/ Weiter

Zurück zu IT

Zur Übersicht