Warum blockiert der Browser?
Webseiten unterliegen der Same-Origin-Policy. Für fremde Origins muss der Zielserver den Zugriff mit CORS-Antwort-Headern erlauben. Manche Methoden und Header lösen zuerst eine OPTIONS-Voranfrage aus. Scheitert diese, wird die eigentliche Anfrage möglicherweise nicht gesendet.
Was ist bei cURL anders?
cURL unterliegt nicht den CORS-Regeln des Browsers. Ein erfolgreicher Terminalbefehl zeigt nur, dass der Endpunkt von diesem Rechner erreichbar ist. Der Browser kontrolliert zudem Header wie Host und Cookie und kann unsicheres HTTP von einer HTTPS-Seite blockieren.
Wie prüft man den Fehler?
Prüfen Sie im Netzwerk-Panel Voranfrage, Origin und Antwort-Header. Access-Control-Allow-Origin sowie erlaubte Methoden und Header müssen zur Anfrage passen. no-cors ist keine Lösung: Die Antwort wird undurchsichtig und Status, Header und Inhalt sind nicht lesbar. Wenn die API CORS nicht unterstützt, nutzen Sie einen vertrauenswürdigen lokalen Client oder einen abgesicherten Relay-Dienst.