logo
GeekFormat

CORS-Inspektor

CORS-Diagnose-Panel

Der Server simuliert die Preflight-Anfrage und die tatsächliche Anfrage, um schnell festzustellen, ob das Problem bei Allow-Origin, Allow-Headers oder credentials liegt.

Simuliert serverseitig CORS Preflight-Anfragen und echte Anfragen, prüft die 6 Antwort-Header einzeln, lokalisiert präzise Cross-Origin-Konfigurationsfehler und liefert Korrekturcode für mehrere Frameworks wie Nginx/Node.js/Spring.

Ähnliche Tools

Anwendungsfälle

  • Wenn der Fehler No 'Access-Control-Allow-Origin' header in der Browser-Konsole erscheint, verwenden Sie sofort dieses Tool um die tatsächlich zurückgegebenen CORS-Header der Ziel-API zu überprüfen
  • Während der Frontend-Backend-Integrationsphase in getrennten Projekten, überprüfen Sie dass die Backend-CORS-Konfiguration korrekt funktioniert, vermeiden Sie blinde Konfigurationsänderungen
  • Nach der Konfiguration von Reverse-Proxy Nginx, Apache oder API Gateway (Kong/APISIX/Spring Cloud Gateway), überprüfen Sie dass CORS-Regeln korrekt weitergegeben werden
  • Wenn Cross-Origin-Anfragen mit Cookie fehlschlagen, wechseln Sie den Credentials-Modus um Konfigurationskonflikte zwischen Allow-Credentials und Allow-Origin zu erkennen
  • Nach dem Hinzufügen benutzerdefinierter Header (wie X-Token, X-Requested-With) wird die Anfrage blockiert, überprüfen Sie ob sie korrekt in Allow-Headers deklariert sind
  • Anfragen mit nicht-einfachen Methoden wie PUT/DELETE/PATCH schlagen bei CORS fehl, überprüfen Sie ob Allow-Methods die entsprechende Methode enthält
  • Das Frontend kann keine benutzerdefinierten Antwort-Header lesen (wie X-Request-Id, X-Total-Count), überprüfen Sie die Konfiguration von Access-Control-Expose-Headers
  • Nach CDN-Beschleunigung funktioniert CORS zeitweise, überprüfen Sie ob Vary: Origin korrekt konfiguriert ist um zu verhindern dass CDN falsche Antworten cached
  • Gelegentliche CORS-Fehler in Produktion, reproduzieren Sie das Problemszenario und behalten Sie die vollständige Antwortnachricht für das Backend-Debugging
  • Beim Erlernen von CORS-Prinzipien beobachten Sie die Funktion jedes Antwort-Headers anhand echter Anfragen, vertiefen Sie das Verständnis des Cross-Origin-Mechanismus

Funktionen

  • Echte serverseitige Simulation von Preflight- und echten Anfragen, ohne Browser-Cache- oder Erweiterungsinterferenzen, genauere Ergebnisse
  • Zeigt separat die Preflight-Antwort OPTIONS und die echte GET/POST-Antwort an, unterscheidet klar in welcher Phase das Problem auftritt
  • Prüft die 6 wichtigsten CORS-Header einzeln: Access-Control-Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials, Expose-Headers, Max-Age, jeder Header einzeln markiert mit Bestehen/Warnung/Fehler-Status
  • Erkennt intelligent den klassischen Konflikt zwischen Wildcard * und Credentials-Modus, warnt sofort vor dieser häufigsten Konfigurationsfalle
  • Unterstützt benutzerdefinierten Anfrage-Ursprung Origin, HTTP-Methoden (GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS) und beliebige benutzerdefinierte Anfrage-Header
  • Ermöglicht das Umschalten zwischen Modus mit oder ohne Anmeldeinformationen (Cookie/Authorization-Header/TLS-Client-Zertifikate), simuliert Szenarien mit withCredentials=true
  • Erkennt automatisch, ob der Header Vary: Origin korrekt konfiguriert ist, verhindert dass CDN/Reverse-Proxy falsche CORS-Antworten cachen
  • Zeigt strukturiert die Preflight-Cache-Konfiguration Max-Age an, bewertet die Auswirkung der Preflight-Anfragehäufigkeit auf die Leistung
  • Prüft die Konfiguration von Access-Control-Expose-Headers, bestätigt welche Antwort-Header von JavaScript im Frontend gelesen werden können
  • Liefert zeilenweise Korrekturempfehlungen, einschließlich Konfigurationsbeispielen für wichtige Server-Frameworks wie Nginx, Apache, Node.js/Express, Spring Boot, Python/Django/Flask
  • Protokolliert vollständig die ursprünglichen Anfrage- und Antwortnachrichten, einschließlich Statuscode, aller Antwort-Header, Antworttext-Vorschau, erleichtert tieferes Debugging
  • Identifiziert automatisch die Unterschiede zwischen einfachen Anfragen und Preflight-Anfragen, erklärt warum Ihre Anfrage Preflight OPTIONS auslöst
  • Erkennt CORS-Probleme in Umleitungsszenarien (wenn sich Origin nach 301/302/307/308-Umleitungen ändert)
  • Unterstützt die Erkennung von Mixed-Content-Szenarien HTTPS/HTTP, warnt vor CORS-Problemen verursacht durch gemischten Inhalt

Anleitung

  1. Geben Sie im Feld Ziel-URL die vollständige Adresse der zu prüfenden API ein (unterstützt http/https, muss den Pfad enthalten)
  2. Geben Sie im Feld Anfrage-Origin den tatsächlichen Ursprung Ihrer Frontend-Seite ein (wie https://example.com, wichtig Protokoll und Port anzugeben, ohne Pfad)
  3. Wählen Sie die HTTP-Methode (GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS), standardmäßig GET
  4. Fügen Sie im Bereich für benutzerdefinierte Header die zu sendenden Header hinzu, einer pro Zeile im Format X-Token: abc123. Content-Type mit nicht-einfachen Typen wie application/json löst automatisch Preflight aus
  5. Aktivieren Sie die Option «Mit Anmeldeinformationen (Credentials)» je nach Szenario; wenn Ihr Frontend-Code withCredentials=true oder credentials: 'include' in fetch verwendet, müssen Sie sie aktivieren
  6. Klicken Sie auf die Schaltfläche «Prüfung starten», das Tool sendet sequenziell vom Server die Preflight-Anfrage OPTIONS und die echte Anfrage (wenn Preflight besteht oder nicht erforderlich ist)
  7. Prüfen Sie den Analysebericht: Sehen Sie sich zuerst das Gesamtergebnis an, dann prüfen Sie den Status jedes CORS-Headers einzeln, passen Sie die Serverkonfiguration gemäß den roten Fehlerkorrekturempfehlungen an, prüfen Sie nach der Korrektur erneut

Häufig gestellte Fragen

Warum funktioniert die API mit Postman/curl gut, aber wenn der Browser darauf zugreift meldet er einen Cross-Origin-Fehler?

Dies ist das klassischste CORS-Problem! Weil Postman und curl überhaupt nicht der Same-Origin-Policy des Browsers unterliegen — sie sind HTTP-Clients, keine Browser, sie fangen Antworten nicht ab, und senden auch nicht automatisch Preflight-Anfragen OPTIONS. Cross-Origin-Fehler sind ein ausschließlich dem Browser vorbehaltener Sicherheitsmechanismus; nur die JavaScript-Ausführungsumgebung des Browsers führt CORS-Prüfungen durch. Dass Postman eine Verbindung herstellen kann zeigt nur dass die API selbst Daten zurückgeben kann, zeigt nicht dass die CORS-Konfiguration korrekt ist. Sie müssen den Browser verwenden, oder dieses Tool (das den CORS-Fluss des Browsers auf dem Server simuliert) zur Überprüfung, und dort werden Sie das Problem entdecken.

Ist der CORS-Fehler ein Frontend- oder Backend-Problem? Wer muss ihn beheben?

99% der CORS-Fehler sind Backend-Konfigurationsprobleme (oder Konfigurationsprobleme in der Nginx/Gateway-Schicht), das Frontend kann sehr wenig tun. Der Kern von CORS ist dass der Server dem Browser über Antwort-Header «autorisiert» Cross-Origin-Zugriff zu erlauben; das Frontend kann nur withCredentials konfigurieren, Anfrage-Header setzen etc., es kann die Sicherheitsbeschränkungen des Browsers nicht umgehen. Die im Internet genannten Frontend-Proxys (devServer-Proxy, Nginx-Reverse-Proxy der Frontend und API auf denselben Ursprung proxien) «täuschen» im Wesentlichen den Browser indem sie ihn glauben lassen es sei eine Same-Origin-Anfrage, sie lösen das CORS-Problem nicht wirklich; in Produktion müssen bei unterschiedlichen Ursprüngen von Frontend und Backend das Backend trotzdem CORS korrekt konfigurieren.

Warum hat meine GET-Anfrage kein Cross-Origin, aber sobald ich sie zu POST/PUT ändere erscheint Cross-Origin?

Weil GET normalerweise die Bedingungen einer einfachen Anfrage erfüllt, der Browser sendet die Anfrage direkt; während POST wenn Sie Content-Type: application/json senden (90% der POST-APIs sind das), gehört nicht mehr zu einer einfachen Anfrage, löst Preflight OPTIONS aus. Die Preflight-Anfrage erfordert dass der Server korrekte CORS-Header zurückgibt; viele Leute haben CORS-Header nur für GET/POST konfiguriert aber die OPTIONS-Methode nicht verarbeitet, oder die OPTIONS-Antwort hat keine Header, deshalb wird ein Fehler gemeldet. Die Methoden PUT/DELETE/PATCH sind an sich keine einfachen Methoden, sie lösen unweigerlich Preflight aus.

Wie löst man Cross-Origin in der Entwicklungsumgebung? Und in Produktion?

In der Entwicklungsumgebung gibt es mehrere Lösungen: ① Integrierter Proxy des Frameworks (devServer.proxy von Vue CLI, server.proxy von Vite, Proxy von Create React App): Proxiert API-Anfragen auf denselben Ursprung wie der Frontend-Entwicklungsserver, der Browser glaubt es sei eine Same-Origin-Anfrage ohne Cross-Origin; ② Deaktivieren von Browser-Sicherheitsparametern (z.B. Chrome mit Startparameter --disable-web-security), nur für temporäre lokale Tests, absolut nicht für normales Browsen; ③ Konfigurieren von CORS im Backend unter Erlaubung des Localhost-Ursprungs (empfohlen, Verhalten konsistent mit Produktion). In Produktion muss das Backend CORS korrekt konfigurieren: Whitelist erlaubter Ursprünge konfigurieren, Allow-Methods/Allow-Headers/Allow-Credentials korrekt setzen, Vary: Origin hinzufügen, oder Gateway/Nginx zur einheitlichen CORS-Verwaltung verwenden.

Kann man Access-Control-Allow-Origin mit mehreren Ursprüngen konfigurieren? Wie konfiguriert man mehrere Domains um Cross-Origin zu erlauben?

Nein, der Antwort-Header Access-Control-Allow-Origin darf nur einen Wert haben, entweder einen spezifischen Ursprung (wie https://a.com), oder *. Der Browser akzeptiert keine mehreren Ursprünge (z.B. Schreiben von https://a.com,https://b.com ist ungültig, der Browser betrachtet es als nicht übereinstimmend). Die korrekte Art der Multi-Ursprung-Konfiguration ist: Der Server pflegt eine Whitelist erlaubter Ursprünge, bei jedem Empfang einer Anfrage liest er den Wert von Origin im Anfrage-Header, prüft ob dieser Origin in der Whitelist ist, wenn ja setzt er Access-Control-Allow-Origin auf diesen spezifischen Origin-Wert, gibt gleichzeitig den Header Vary: Origin zurück; wenn nicht, gibt er keine CORS-Header zurück oder gibt einen Fehler zurück. Versuchen Sie nicht mehrere Allow-Origin-Header zurückzugeben oder mehrere Werte durch Komma zu trennen, der Browser erkennt sie nicht.

Muss die Preflight-Anfrage OPTIONS Geschäftslogik zurückgeben? Kann sie direkt 204 zurückgeben?

Die Preflight-Anfrage OPTIONS muss keine Geschäftslogik noch Antworttext zurückgeben, sie muss nur die korrekten CORS-Antwort-Header und Statuscode 200/204 zurückgeben das reicht. Der Browser betrachtet bei Empfang korrekter CORS-Header Preflight als bestanden, er wird den Body-Inhalt der OPTIONS-Antwort nicht lesen. Also die beste Praxis ist: OPTIONS-Anfragen direkt in der Nginx/Gateway-Schicht abfangen, 204 No Content und korrekte CORS-Header zurückgeben, ohne an den Backend-Anwendungsserver weiterzuleiten; dies entlastet das Backend und vermeidet auch 405-Fehler verursacht durch Backend-Routen die OPTIONS nicht unterstützen. Aber stellen Sie sicher dass die CORS-Header der OPTIONS-Antwort konsistent mit den CORS-Headern der echten Anfrage sind.

Warum habe ich withCredentials: true konfiguriert, aber Cookie wird nicht mitgeführt?

Cross-Origin-Anfragen mit Cookie erfordern das gleichzeitige Erfüllen von drei Bedingungen: ① XMLHttpRequest.withCredentials = true im Frontend oder credentials: 'include' in fetch; ② Backend-Antwort-Header Access-Control-Allow-Credentials: true; ③ Access-Control-Allow-Origin darf nicht * sein, muss spezifischer Ursprung sein. Die drei Bedingungen sind unentbehrlich. Beachten Sie außerdem die Cookie-Attribute: Das Cookie muss SameSite=None; Secure gesetzt haben (HTTPS-Umgebung) um in Cross-Origin-Anfragen mitgeführt werden zu können; wenn das Cookie SameSite=Lax oder Strict ist, wird es in Cross-Origin-Anfragen nicht mitgeführt; das Domain-Attribut des Cookies muss korrekt konfiguriert sein; beachten Sie auch die Auswirkungen von Drittanbieter-Cookie-Richtlinien (Browser wie Chrome haben Beschränkungen für Drittanbieter-Cookies).

Welche Beziehung besteht zwischen CORS und CSRF? Verursacht das Konfigurieren von CORS CSRF-Schwachstellen?

CORS ist das Lockern von Cross-Origin-Zugriffsbeschränkungen, CSRF ist ein Cross-Site-Request-Forgery-Angriff, sie sind unterschiedliche Konzepte. Korrekt konfiguriertes CORS verursacht keine direkten CSRF-Schwachstellen — weil CORS nur JS erlaubt Antworten zu lesen, während CSRF ist wenn ein Angreifer den Benutzer dazu veranlasst Anfragen ohne sein Wissen zu senden (wie img-Tags, automatisches Formularabsenden), diese Anfragen werden auch ohne CORS mit Cookie gesendet. CSRF-Abwehr erfordert die Verwendung von CSRF-Token, SameSite-Cookie, Prüfung von Origin/Referer und anderen Lösungen, man kann CSRF nicht durch Deaktivieren von CORS abwehren. Aber wenn Sie bei der CORS-Konfiguration Allow-Origin auf * setzen und Anmeldeinformationen erlauben, wird dies das CSRF-Risiko verstärken, deshalb kann in Szenarien mit Anmeldeinformationen absolut nicht * verwendet werden, Sie müssen die Ursprungs-Whitelist streng einschränken.

Haben Dateidownload, Umleitungen, Laden von img/script-Tags CORS-Probleme?

Das Laden von Cross-Origin-Ressourcen mit normalen <img>, <script>, <link>-Tags (CDN-Bilder, JS-Skripte, CSS) hat standardmäßig keine CORS-Probleme; dies sind «eingebettete Ressourcen» keine «AJAX-Anfragen», der Browser erlaubt das Laden aber JS kann den Inhalt nicht lesen. Aber wenn Sie Cross-Origin-Bilder in Canvas manipulieren möchten, oder diese Ressourcen mit fetch/XHR laden und ihren Inhalt lesen möchten, dann brauchen Sie CORS, und gleichzeitig müssen Sie das crossorigin-Attribut zum Tag hinzufügen. Cross-Origin-Dateidownload (Klick auf a-Tag zum Herunterladen) erfordert standardmäßig ebenfalls kein CORS. Umleitungen beeinflussen CORS: Wenn die Preflight-Anfrage OPTIONS eine 3xx-Umleitung zurückgibt, wird der Browser sie direkt ablehnen (Preflight redirect is not allowed); wenn die Umleitung der echten Anfrage zwischen unterschiedlichen Ursprüngen erfolgt, muss jeder Sprung korrekt CORS-Header zurückgeben.

Wie konfiguriert man CORS korrekt in Nginx? Geben Sie ein funktionierendes Konfigurationsbeispiel?

Wichtige Punkte der empfohlenen Nginx-Konfiguration: ① Verwendung der map-Direktive zur Übereinstimmung mit der Origin-Whitelist, dynamisches Setzen der Variable $cors_origin; ② OPTIONS-Anfragen geben direkt 204 zurück ohne an Backend weiterzuleiten; ③ add_header vergessen Sie nicht den Parameter always hinzuzufügen um sicherzustellen dass Fehlerantworten ebenfalls den Header führen; ④ Vary: Origin hinzufügen; ⑤ Allow-Methods/Allow-Headers/Credentials korrekt konfigurieren. Beispielkonfigurationen finden Sie in den Korrekturempfehlungen der Erkennungsergebnisse dieses Tools; wir bieten geprüfte Konfigurationsfragmente für wichtige Frameworks wie Nginx, Apache, Node.js Express, Spring Boot, Python Flask/Django, Koa, Go Gin.

Nach der CORS-Konfiguration, wie überprüft man ob sie wirkt?

Schritte zur CORS-Überprüfung: ① Zuerst verwenden Sie die Online-Erkennung dieses Tools, geben URL, Origin, Methode, Header, Anmeldeinformationsoption ein, sehen Sie ob jede Prüfung des Preflight und der echten Anfrage besteht; ② Öffnen Sie das Network-Panel der Browser-DevTools, markieren Sie Disable cache um Cache zu deaktivieren (Vermeidung von Altkachel-Interferenz), lösen Sie die Cross-Origin-Anfrage aus, überprüfen Sie dass die Antwort-Header des Preflight OPTIONS und der echten Anfrage korrekt sind; ③ In Console sehen Sie nach ob es CORS-bezogene Fehler gibt; ④ Testen Sie verschiedene Szenarien: GET-Anfragen ohne benutzerdefinierte Header, POST-Anfragen mit application/json, PUT/DELETE-Methoden, mit Cookie/ohne Cookie, mit benutzerdefinierten Headern; ⑤ Simulieren Sie eine OPTIONS-Anfrage mit curl: curl -i -X OPTIONS -H "Origin: https://yoursource.com" https://api.example.com/endpoint, überprüfen Sie dass die Antwort-Header korrekt sind.

Warum meldet die Cross-Origin-Anfrage einen Fehler in Chrome aber funktioniert normal in Safari/Firefox? Oder umgekehrt?

Verschiedene Browser haben Unterschiede in den Implementierungsdetails der CORS-Spezifikation: ① Safari hat strengere Beschränkungen für Max-Age des Preflight-Caches (alte Versionen nur 600 Sekunden), die Cookie-Richtlinie (ITP Intelligent Tracking Prevention) ist ebenfalls strenger, kann Cross-Origin-Cookie-Probleme verursachen; ② Chrome hat strengere Prüfungen für Wildcards mit Anmeldeinformationen, Allow-Headers/Allow-Methods erlauben ebenfalls nicht *, einige Firefox-Versionen können nachsichtiger sein; ③ Alter IE (IE11) verwendet XDomainRequest anstelle von standardmäßigem XMLHttpRequest, die CORS-Implementierung hat viele Fallen (z.B. keine Unterstützung für benutzerdefinierte Header, nur Unterstützung für GET/POST); ④ Verschiedene Browser haben subtile Unterschiede bei der Verarbeitung des Vary-Headers, Umleitungsverarbeitung, Sicherheits-Header-Verarbeitung. Die Lösung ist streng gemäß CORS-Spezifikation zu konfigurieren, sich nicht auf das kompatible Verhalten eines bestimmten Browsers zu verlassen.

Wie viel ist angemessen Access-Control-Max-Age zu setzen? Welche Probleme gibt es wenn es zu lang oder zu kurz gesetzt ist?

Empfohlen wird ein Wert zwischen 3600 (1 Stunde) und 86400 (24 Stunden). Zu kurz setzen (wie 60 Sekunden): Der Preflight-Cache läuft schnell ab, sendet häufig OPTIONS-Anfragen, erhöht die Anfragezeit und Serverlast, die Auswirkung ist in schwachen mobilen Netzwerkumgebungen bemerkbar. Zu lang setzen (wie 31536000, also ein Jahr): Wenn Sie die CORS-Konfiguration aktualisieren (z.B. Hinzufügen erlaubter Methoden, Header), kann das alte Preflight-Ergebnis im Browser-Cache des Benutzers lange brauchen um abzulaufen, während dieser Zeit treten Probleme auf dass die Konfiguration keine Wirkung zeigt. Außerdem kürzen Chrome und Firefox Werte die 86400 Sekunden überschreiten automatisch auf 86400 Sekunden, egal wie Sie es setzen es nützt nichts. In der Entwicklungsumgebung können Sie -1 setzen um den Preflight-Cache zu deaktivieren, erleichtert das Debugging.

Haben WebSocket-Verbindungen Cross-Origin-Probleme? Gilt CORS für WebSocket?

WebSocket (ws:// und wss://) unterliegen nicht dem HTTP-CORS-Mechanismus, weil WebSocket ein unabhängiges Protokoll ist, es sind keine HTTP-AJAX-Anfragen. Aber die Handshake-Phase von WebSocket ist eine HTTP-Anfrage; der Server kann den Origin-Header prüfen um zu entscheiden ob er die Verbindung erlaubt — dies ist eine Berechtigungsprüfung auf WebSocket-Ebene, nicht Standard-CORS, aber das Prinzip ist ähnlich. Wenn die WebSocket-Verbindung abgelehnt wird, müssen Sie die Origin-Prüfkonfiguration des WebSocket-Servers überprüfen, nicht die HTTP-CORS-Header. Bibliotheken wie Socket.IO können ihre eigene Art der Cross-Origin-Konfiguration haben, ähnlich der Standard-CORS-Konfiguration aber nicht exakt gleich. Außerdem haben andere Browser-APIs wie HTTP/2 Server Push, WebRTC ebenfalls ihre eigene Berechtigungsprüfung, folgen nicht vollständig dem HTTP-CORS.

Sind die Erkennungsergebnisse dieses Tools konsistent mit dem Browserverhalten? Warum besteht die Erkennung mit dem Tool aber der Browser meldet trotzdem einen Fehler?

Dieses Tool auf dem Server simuliert streng gemäß W3C-CORS-Spezifikation den Preflight- und echten Anfragefluss des Browsers, die Prüflogik der CORS-Header ist grundsätzlich konsistent mit modernen Browsern. Wenn das Tool erkennt dass es besteht aber der Browser trotzdem einen Fehler meldet, sind mögliche Ursachen: ① Der Browser hat Preflight-Ergebnisse oder alte Antworten gecacht, führen Sie erzwungenes Neuladen Ctrl+F5 durch oder löschen Sie den Cache und versuchen Sie es erneut; ② Browser-Erweiterungen (Werbeblocker, Datenschutz, Sicherheitsplugins) haben die Anfrage modifiziert oder abgefangen; ③ Der Origin, die Anfrage-Header, die Methode, die Anmeldeinformationsoption die Sie im Tool eingegeben haben sind nicht konsistent mit dem was das Frontend tatsächlich sendet (z.B. das Frontend führt tatsächlich einen benutzerdefinierten Header mit den Sie nicht im Tool hinzugefügt haben); ④ Inkonsistenter Cache auf CDN/Proxy-Knoten, der Knoten den das Tool anfragt und der Knoten den der Browser anfragt geben unterschiedliche Ergebnisse zurück; ⑤ Der Browser hat spezielle Sicherheitsrichtlinien (wie Anfragen an gemischten HTTP-Inhalt in HTTPS-Seiten werden blockiert, spezielle Beschränkungen des file://-Protokolls lokaler Dateien).

术语表

CORS (Cross-Origin Resource Sharing)
Cross-Origin-Ressourcenfreigabe, W3C-Standard, der es Servern ermöglicht zu deklarieren welche Ursprünge über neue HTTP-Header-Felder auf Ressourcen zugreifen können, ist die offizielle Lösung moderner Browser zur Lösung von Cross-Origin-Problemen.
Same-Origin-Policy (Gleichursprungsrichtlinie)
Zentraler Sicherheitsmechanismus des Browsers; nur wenn Protokoll, Domäne und Port exakt übereinstimmen gilt es als gleicher Ursprung, und JavaScript unterschiedlichen Ursprungs kann standardmäßig nicht die Ressourcen des anderen lesen.
Preflight-Anfrage (Preflight Request)
Anfrage mit Methode OPTIONS die der Browser automatisch zuerst für nicht-einfache Cross-Origin-Anfragen sendet, wird verwendet um den Server zu fragen ob er die nachfolgende echte Anfrage erlaubt; erst nach erfolgreichem Preflight wird die echte Anfrage gesendet.
Einfache Anfrage (Simple Request)
Cross-Origin-Anfrage die spezifische Bedingungen erfüllt (Methode GET/HEAD/POST, nur sichere Header, spezifischer Content-Type), die keine Preflight senden muss und direkt die echte Anfrage sendet.
Access-Control-Allow-Origin (ACAO)
Wichtigster CORS-Antwort-Header, gibt den erlaubten Ursprung für den Cross-Origin-Zugriff an, kann ein spezifischer Ursprungs-URI oder Wildcard * sein, mit Anmeldeinformationen kann * nicht verwendet werden.
Access-Control-Allow-Methods (ACAM)
Preflight-Antwort-Header, listet alle vom Server unterstützten HTTP-Methoden auf, mehrere Methoden durch Komma getrennt.
Access-Control-Allow-Headers (ACAH)
Preflight-Antwort-Header, listet alle vom Server erlaubten Anfrage-Header-Felder auf; vom Frontend gesendete benutzerdefinierte Header müssen hier deklariert werden.
Access-Control-Allow-Credentials (ACAC)
Antwort-Header, boolescher Wert true gibt an dass das Mitführen von Anmeldeinformationen wie Cookie und Authorization in Cross-Origin-Anfragen erlaubt ist; in diesem Fall darf Allow-Origin nicht * sein.
Access-Control-Max-Age (ACMA)
Preflight-Antwort-Header, gibt die Cache-Zeit des Preflight-Ergebnisses in Sekunden an; eine vernünftige Konfiguration kann OPTIONS-Anfragen reduzieren und die Leistung verbessern.
Vary: Origin
Antwort-Header, teilt CDN/Proxy mit dass der Antwortinhalt je nach Origin-Anfrage-Header variiert, beim Cachen muss Origin als Cache-Schlüssel einbezogen werden um Cache-Chaos bei Cross-Origin-Antworten zu vermeiden.
CORS-safelisted Anfrage-Header
Anfrage-Header die ohne Deklaration in Allow-Headers gesendet werden können, einschließlich Accept, Accept-Language, Content-Language, Content-Type (spezifische Werte) etc.
Verbotene Headernamen (Forbidden header name)
Anfrage-Header die der Browser JavaScript verbietet programmatisch zu setzen, wie Host, Connection, Cookie, Origin etc.; diese Header werden automatisch vom Browser gesteuert.
Anfrage mit Anmeldeinformationen (Credentialed Request)
Cross-Origin-Anfrage die Identitätsnachweise wie Cookie, HTTP-Authentifizierungsinformationen, TLS-Client-Zertifikate mitführt; erfordert dass Frontend und Backend gemeinsam withCredentials und Allow-Credentials konfigurieren.
Access-Control-Expose-Headers
Antwort-Header, listet die Antwort-Header auf auf die JavaScript zugreifen kann; standardmäßig sind nur wenige grundlegende Header zugänglich, benutzerdefinierte Header müssen hier deklariert werden.
OPTIONS-Methode
Eine der HTTP-Methoden, wird verwendet um die vom Server unterstützten Kommunikationsoptionen abzurufen; CORS verwendet sie zum Senden von Preflight-Anfragen, fragt den Server nach erlaubten Methoden, Headern, Anmeldeinformationen.
Origin-Anfrage-Header
Vom Browser automatisch hinzugefügter Anfrage-Header, gibt an von welchem Ursprung die aktuelle Anfrage kommt (Protokoll+Domäne+Port); der Server bestimmt anhand dieses Headers ob er Cross-Origin erlaubt.
crossorigin-Attribut
Attribut von HTML-Elementen (wie script, img, link), wird verwendet um anzugeben ob das Laden von Ressourcen mit CORS aktiviert wird; die Werte sind anonymous (ohne Anmeldeinformationen) und use-credentials (mit Anmeldeinformationen).
Anfragemodus no-cors
Ein Modus der fetch-API, der das Senden von Cross-Origin-Anfragen ermöglicht aber nur einfache Anfragen senden kann und JavaScript den Antwortinhalt nicht lesen kann, entspricht dem Senden einer opaken Anfrage (Opaque Response).

Vollständige Vergleichstabelle der CORS-Antwort-Header

Entscheidungstabelle welche Anfragen Preflight auslösen

Schnellreferenztabelle häufiger CORS-Fehler und Lösungen

Troubleshooting