Zum Inhalt springen

CORS-Fehler im Browser: Ursachen und Lösungen für Entwickler

Mittel 20 Min. Aktualisiert:

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. 1

    Überprüfen Sie den genauen Origin im Browser

    Öffnen Sie die DevTools (F12) und geben Sie in der Konsole location.origin ein. Notieren Sie den genauen Wert, zum Beispiel http://localhost:3000. Suchen Sie im Tab Network die fehlgeschlagene Anfrage und sehen Sie sich die Anfrage- und Antwort-Header an. Achten Sie auf Origin in der Anfrage und Access-Control-Allow-Origin in der Antwort.

  2. 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(...) und app.UseCors(...). Geben Sie immer den genauen Origin an, nicht *, wenn Sie Credentials verwenden.

  3. 3

    Behandeln Sie OPTIONS-Preflight

    Überprüfen Sie, ob der Server auf OPTIONS-Anfragen mit 204 oder 200 und den Headern Access-Control-Allow-Methods und Access-Control-Allow-Headers antwortet. In Express erledigt das die cors-Middleware automatisch. In Nginx fügen Sie add_header Access-Control-Allow-Origin ... und if ($request_method = OPTIONS) { return 204; } hinzu.

  4. 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.proxy in vite.config.js. In Create React App: das Feld proxy in package.json. Rufen Sie dann die API über einen relativen Pfad (/api/...) statt der vollständigen URL auf.

  5. 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 /api an das Backend weiterleitet. So sendet der Browser keine Cross-Origin-Anfrage.

  6. 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_pass und add_header auf der richtigen Ebene. Auf Serverless-Plattformen (Vercel, Netlify) konfigurieren Sie CORS in den Antwort-Headern der Funktionen oder in der entsprechenden Konfiguration.

  7. 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 Antwort Access-Control-Allow-Origin und Access-Control-Allow-Methods enthält. Wenn nicht, liegt das Problem auf dem Server.

  8. 8

    Leeren Sie den Cache und laden Sie neu

    Browser können Preflight-Antworten gemäß dem Header Access-Control-Max-Age zwischenspeichern. 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 Wochen

Hä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.

Teilen
Keine Lösung gefunden?Der KI-IT-Assistent ist rund um die Uhr erreichbar. Beschreiben Sie das Problem oder senden Sie einen Screenshot und erhalten Sie eine Anleitung für Ihren Fall.KI-IT-Assistent fragen