CORS-Fehler: blocked by CORS policy
Kurz: Der Browser blockiert die Antwort einer fremden Herkunft, weil der Server nicht ausdrücklich erlaubt hat, dass diese Seite darauf zugreifen darf.
Genauer: Meldung in der Konsole: Access to fetch at 'https://api.example.com' from origin 'https://meine-seite.de' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Das ist ein Schutz des Browsers, nicht des Servers: Die Anfrage kam an, die Antwort darf die Seite aber nicht lesen.
Im Detail
Warum es das gibt
Die Same-Origin-Policy verhindert, dass eine Seite (Origin A) Daten von Origin B liest. Eine Origin besteht aus Protokoll, Host und Port. CORS erlaubt dem Server B, per Header ausgewählten Origins Zugriff zu geben. Bei „nicht einfachen“ Anfragen (JSON mit Authorization, PUT/DELETE) schickt der Browser vorab eine Preflight-Anfrage (OPTIONS).
Typische Ursachen
- Der Server sendet kein
Access-Control-Allow-Origin. - Die Origin passt nicht (
httpvs.https,wwwvs. ohne, anderer Port, Tippfehler). - Der Preflight (
OPTIONS) wird nicht beantwortet oder liefert 404/401. Access-Control-Allow-Headersoder-Methodsenthalten nicht, was gesendet wird.- Mit Cookies/Credentials darf
Access-Control-Allow-Originnicht*sein undAccess-Control-Allow-Credentials: truemuss gesetzt sein. - Ein Fehlerseite (500/502) enthält keine CORS-Header und tarnt sich als CORS-Fehler.
Lösungswege
- Auf dem Server die erlaubte Origin setzen:
Access-Control-Allow-Origin: https://meine-seite.deund bei Bedarf-Methods,-Headers,-Max-Age. (Express: Paketcors; Next.js: Header in den Route-Handlern/next.config.) - Preflight-
OPTIONSmit 204 beantworten. - In der Entwicklung einen Proxy nutzen (Vite/Next
rewrites), sodass der Browser nur die eigene Origin anspricht. - Nicht
*zusammen mit Cookies verwenden; Origins aus einer Liste erlaubter Herkunft prüfen und zurückspiegeln. - Netzwerk-Tab (F12) ansehen: Welche Antwort und welche Header kamen wirklich zurück? CORS-Erweiterungen im Browser „lösen“ nur dein lokales Problem, nicht das der Nutzer.
Siehe auch: CORS, HTTP-Header