Kurze Antwort
Ein CORS-Fehler tritt auf, wenn der Browser eine Anfrage an eine andere Domain blockiert, weil der Server nicht den entsprechenden `Access-Control-Allow-Origin`-Header gesendet hat. Die Lösung liegt auf dem Server: Fügen Sie den erlaubten Origin, Methoden und Header hinzu, oder verwenden Sie während der Entwicklung einen Proxy. Versuchen Sie nicht, ihn im Frontend zu umgehen.
So erkennen Sie das Problem
- In der Browserkonsole steht: "Access to fetch at ... has been blocked by CORS policy"
- Der API-Aufruf funktioniert in Postman oder curl, aber nicht im Browser
- Die Netzwerkanfrage hat den Status 0 oder (failed) im Tab Network
- Tritt nur auf dem lokalen Entwicklungsserver auf, nicht in der Produktion
- Der Fehler tritt nach dem Hinzufügen einer neuen Domain oder Subdomain auf
Häufigste Ursachen
Access-Control-Allow-Origin fehlt
Der Server sendet keinen `Access-Control-Allow-Origin`-Header oder sendet einen Wert, der nicht mit dem Origin der Seite übereinstimmt. Der Browser blockiert dann das Lesen der Antwort.
Falscher Origin oder Wildcard mit Credentials
Wenn Sie `credentials: 'include'` verwenden, darf der Server nicht `*` zurückgeben, sondern den genauen Origin. Außerdem sind `http://localhost:3000` und `http://127.0.0.1:3000` unterschiedliche Origins.
Preflight-Anfrage nicht behandelt
Für nicht standardmäßige Methoden oder Header sendet der Browser zuerst eine OPTIONS-Anfrage. Wenn der Server nicht auf OPTIONS mit den entsprechenden Headern antwortet, wird die Hauptanfrage nicht gesendet.
Proxy oder Hosting leitet Header nicht weiter
Ein Reverse Proxy (Nginx, Apache) oder eine Serverless-Plattform kann CORS-Header entfernen oder eine eigene Fehlerseite zurückgeben. Überprüfen Sie die Proxy-Konfiguration.
Falsche API-URL
Wenn das Frontend eine falsche Domain, Subdomain oder einen falschen Port aufruft, erlaubt der Server möglicherweise diesen Origin nicht. Überprüfen Sie die genaue URL im Code und die Liste der erlaubten Origins auf dem Server.
Lösung Schritt für Schritt
- 1
Überprüfen Sie den genauen Origin im Browser
Öffnen Sie die DevTools (F12) und geben Sie in der Konsole
location.originein. Notieren Sie den genauen Wert, zum Beispielhttp://localhost:3000. Suchen Sie im Tab Network die fehlgeschlagene Anfrage und sehen Sie sich die Anfrage- und Antwort-Header an. Achten Sie aufOriginin der Anfrage undAccess-Control-Allow-Originin der Antwort. - 2
Konfigurieren Sie CORS auf dem Server
Erlauben Sie im Backend explizit den Origin des Frontends. In Node.js/Express:
app.use(cors({ origin: 'http://localhost:3000', credentials: true })). In Spring Boot:@CrossOrigin(origins = "http://localhost:3000")oder globale Konfiguration. In ASP.NET Core:builder.Services.AddCors(...)undapp.UseCors(...). Geben Sie immer den genauen Origin an, nicht*, wenn Sie Credentials verwenden. - 3
Behandeln Sie OPTIONS-Preflight
Überprüfen Sie, ob der Server auf OPTIONS-Anfragen mit 204 oder 200 und den Headern
Access-Control-Allow-MethodsundAccess-Control-Allow-Headersantwortet. In Express erledigt das diecors-Middleware automatisch. In Nginx fügen Sieadd_header Access-Control-Allow-Origin ...undif ($request_method = OPTIONS) { return 204; }hinzu. - 4
Verwenden Sie einen Proxy während der lokalen Entwicklung
Wenn Sie den Server nicht ändern können, konfigurieren Sie einen Proxy im Entwicklungstool. In Vite:
server.proxyinvite.config.js. In Create React App: das Feldproxyinpackage.json. Rufen Sie dann die API über einen relativen Pfad (/api/...) statt der vollständigen URL auf. - 5
Vermeiden Sie CORS in der Produktion
Die beste Lösung ist, dass Frontend und API denselben Origin haben (gleiche Domain und gleicher Port). Wenn nicht, verwenden Sie einen Reverse Proxy, der
/apian das Backend weiterleitet. So sendet der Browser keine Cross-Origin-Anfrage. - 6
Überprüfen Sie Proxy- und Hosting-Konfiguration
Wenn Sie Nginx, Apache oder Cloud-Hosting verwenden, stellen Sie sicher, dass CORS-Header nicht entfernt werden. In Nginx verwenden Sie
proxy_passundadd_headerauf der richtigen Ebene. Auf Serverless-Plattformen (Vercel, Netlify) konfigurieren Sie CORS in den Antwort-Headern der Funktionen oder in der entsprechenden Konfiguration. - 7
Testen Sie mit curl
Simulieren Sie den Preflight:
curl -i -X OPTIONS http://localhost:8080/api/podaci -H "Origin: http://localhost:3000" -H "Access-Control-Request-Method: GET". Überprüfen Sie, ob die AntwortAccess-Control-Allow-OriginundAccess-Control-Allow-Methodsenthält. Wenn nicht, liegt das Problem auf dem Server. - 8
Leeren Sie den Cache und laden Sie neu
Browser können Preflight-Antworten gemäß dem Header
Access-Control-Max-Agezwischenspeichern. Warten Sie, bis er abläuft, starten Sie den Browser neu oder verringern Sie vorübergehend diesen Wert auf dem Server. Aktivieren Sie in den DevTools "Disable cache" und aktualisieren Sie die Seite. Manchmal ist ein Neustart des Entwicklungsservers erforderlich, damit Konfigurationsänderungen wirksam werden.
Wenn nichts hilft: erweiterte Überprüfungen
Überprüfen Sie, ob der Server CORS-Header nur für erfolgreiche Antworten zurückgibt. Wenn die Anwendung einen 500-Fehler wirft, fehlen möglicherweise die CORS-Header, und der Browser meldet CORS statt des eigentlichen Fehlers. Beheben Sie in diesem Fall zuerst den Serverfehler. Verwenden Sie dann ein Tool wie curl oder Postman, um die Rohantwort zu sehen. Achten Sie auf Weiterleitungen: Wenn der Server von http auf https umleitet, können CORS-Header verloren gehen. Überprüfen Sie schließlich, ob Sie mehrere Ebenen haben (CDN, Load Balancer, Proxy) und ob eine davon Header löscht. Verwenden Sie in der Produktion niemals Access-Control-Allow-Origin: *, wenn die Anwendung Cookies oder Autorisierungsheader verwendet.
So beugen Sie vor
- Definieren Sie eine Liste der erlaubten Origins in der Serverkonfiguration und aktualisieren Sie sie bei jeder Domainänderung.
- Verwenden Sie nach Möglichkeit denselben Origin für Frontend und API oder einen Reverse Proxy.
- Testen Sie das CORS-Verhalten mit automatisierten Tests oder curl vor der Veröffentlichung.
- Vermeiden Sie `*` für `Access-Control-Allow-Origin`, wenn Sie Credentials verwenden.
Wann Sie einen Profi rufen sollten
Wenn Sie alle Schritte ausprobiert haben und der CORS-Fehler die Anwendung weiterhin blockiert oder wenn Sie keinen Zugriff auf die Serverkonfiguration haben, wenden Sie sich an den IT-Support oder das DevOps-Team. Sie können Proxy, Hosting und Sicherheitsregeln überprüfen.
Software- und Produktentwicklung · Individuelle Apps, SaaS und ein MVP in 4 bis 8 WochenHäufige Fragen
Warum gibt es den CORS-Fehler nicht in Postman?
Postman und curl wenden keine CORS-Regeln an, da sie keine Browser sind. CORS ist eine Sicherheitsmaßnahme des Browsers, daher tritt der Fehler nur im Browser auf. Das bestätigt, dass das Problem in den Server-Headern liegt, nicht im Netzwerk.
Kann ich CORS im Frontend beheben?
Sie können CORS nicht dauerhaft im Frontend beheben, da der Browser das Lesen der Antwort oder die Anfrage selbst beim Preflight blockiert, bevor die Daten Ihren JavaScript-Code erreichen. Die einzige Lösung ist, dass der Server die richtigen Header sendet oder Sie einen Proxy verwenden.
Was bedeutet der Fehler "Credential is not supported if the CORS header is wildcard"?
Das bedeutet, dass Sie Credentials (zum Beispiel Cookies) senden, während der Server `Access-Control-Allow-Origin: *` zurückgibt. Der Browser erlaubt das nicht. Der Server muss den genauen Origin und `Access-Control-Allow-Credentials: true` zurückgeben.