Wie behebe ich CORS-Fehler von meiner API-Gateway-API aus?

Letzte Aktualisierung: 18.11.2022

Beim Versuch, meine Amazon-API-Gateway-API aufzurufen, erhalte ich die Fehlermeldung „No 'Access-Control-Allow-Origin' header is present on the requested resource“ (Es ist kein „Access-Control-Allow-Origin“-Header in der angeforderten Ressource vorhanden). Wie behebe ich diesen Fehler und andere CORS-Fehler von API Gateway aus?

Kurzbeschreibung

CORS-Fehler (Cross-Origin Resource Sharing) treten auf, wenn ein Server die vom CORS-Standard benötigten HTTP-Header nicht zurückgibt. Um einen CORS-Fehler von einer API-Gateway-REST-API oder HTTP-API aus zu beheben, müssen Sie die API neu konfigurieren, damit sie dem CORS-Standard entspricht.

Weitere Informationen zum Konfigurieren von CORS für REST-APIs finden Sie unter Aktivieren von CORS für eine REST-API-Ressource. Informationen zu HTTP-APIs finden Sie unter Konfigurieren von CORS für eine HTTP-API.

Hinweis: CORS muss auf Ressourcenebene konfiguriert werden und kann mithilfe von API-Gateway-Konfigurationen oder Backend-Integrationen wie AWS Lambda verarbeitet werden.

Lösung

Das folgende Beispiel zeigt, wie Sie den CORS-Fehler No ‘Access-Control-Allow-Origin’ header present beheben können. Sie können allerdings zur Behebung aller CORS-Fehler ähnlich vorgehen. Zum Beispiel: Methode wird unter Access-Control-Allow-Methods-Headerfehlern nicht unterstützt und keine Access-Control-Allow-Headers-Header weisen Fehler auf.

Hinweis: Der Fehler Keine 'Access-Control-Allow-Origin'-Header vorhanden kann aus einem der folgenden Gründe auftreten:

  • Die API ist nicht mit einer OPTIONEN-Methode konfiguriert, die die erforderlichen CORS-Header zurückgibt.
  • Ein anderer Methodentyp (wie GET, PUT oder POST) ist nicht für die Rückgabe der erforderlichen CORS-Header konfiguriert.
  • Eine API mit Proxy-Integration oder Nicht-Proxy-Integration ist nicht so konfiguriert, dass die erforderlichen CORS-Header zurückgegeben werden.
  • (Nur bei privaten REST-APIs) Es wird die falsche Aufruf-URL aufgerufen oder der Datenverkehr wird nicht zum Schnittstellenendpunkt der Virtual Private Cloud (VPC) weitergeleitet.

Bestätigen Sie die Fehlerursache

Es gibt zwei Möglichkeiten, die Ursache eines CORS-Fehlers von API Gateway zu bestätigen:

  • Erstellen Sie eine HTTP-Archivdatei (HAR), wenn Sie Ihre API aufrufen. Bestätigen Sie dann die Fehlerursache in der Datei, indem Sie die Header in den Parametern überprüfen, die in der API-Antwort zurückgegeben werden.
    -oder-
  • Überprüfen Sie mithilfe der Entwicklertools in Ihrem Browser die Anforderungs- und Antwortparameter der fehlgeschlagenen API-Anforderung.

Konfigurieren Sie CORS für Ihre API-Ressource, bei der der Fehler auftritt

Bei REST-APIs

Befolgen Sie die Anweisungen unter Aktivieren von CORS auf einer Ressource mithilfe der API-Gateway-Konsole.

Bei HTTP-APIs

Befolgen Sie die Anweisungen unter Konfigurieren von CORS für eine HTTP-API.

Wichtig: Wenn Sie CORS für eine HTTP-API konfigurieren, sendet API Gateway automatisch eine Antwort auf OPTIONS-Vorabanforderungen. Diese Antwort wird auch gesendet, wenn keine OPTIONS-Route für Ihre API konfiguriert ist. Bei einer CORS-Anforderung fügt API Gateway die konfigurierten CORS-Header der Antwort einer Integration hinzu.

Gehen Sie beim Konfigurieren von CORS auf Ihrer API-Ressource unbedingt folgendermaßen vor:

  • Aktivieren Sie für Gateway Responses for <api-name> API die Kontrollkästchen DEFAULT 4XX und DEFAULT 5XX.

Hinweis: Wenn Sie diese Standardoptionen auswählen, antwortet API Gateway mit den erforderlichen CORS-Headern, selbst wenn eine Anforderung den Endpunkt nicht erreicht. Wenn eine Anforderung beispielsweise einen falschen Ressourcenpfad enthält, antwortet API Gateway immer noch mit dem Fehler 403 „Missing Authentication Token“.

  • Aktivieren Sie für Methods das Kontrollkästchen für die OPTIONS-Methode, falls diese noch nicht aktiviert ist. Aktivieren Sie außerdem die Kontrollkästchen für alle anderen Methoden, die für CORS-Anforderungen verfügbar sind. Beispiel: GET, PUT und POST.

Hinweis: Durch das Konfigurieren von CORS in der API-Gateway-Konsole wird der Ressource eine OPTIONS-Methode hinzugefügt, falls noch keine vorhanden ist. Außerdem wird die Antwort 200 der OPTIONS-Methode mit den erforderlichen Access-Control-Allow-*-Headern konfiguriert. Wenn Sie CORS bereits mit der Konsole konfiguriert haben, werden bei der erneuten Konfiguration alle vorhandenen Werte überschrieben.

Konfigurieren Sie Ihre REST-API-Integrationen so, dass die erforderlichen CORS-Header zurückgegeben werden

Konfigurieren Sie Ihre Backend-AWS Lambda-Funktion oder Ihren HTTP-Server so, dass die erforderlichen CORS-Header in seiner Antwort gesendet werden. Beachten Sie Folgendes:

  • Zulässige Domänen müssen als Liste in den Header-Wert Access-Control-Allow-Origin aufgenommen werden.
  • Bei Proxy-Integrationen können Sie in API Gateway keine Integrationsantwort einrichten, um die vom Backend Ihrer API zurückgegebenen Antwortparameter zu ändern. Bei einer Proxy-Integration leitet API Gateway die Backend-Antwort direkt an den Client weiter.
  • Wenn Sie eine Nicht-Proxy-Integration verwenden, müssen Sie manuell eine Integrationsantwort in API Gateway einrichten, damit die erforderlichen CORS-Header zurückgegeben werden.

Hinweis: Bei APIs mit einer Nicht-Proxy-Integration werden beim Konfigurieren von CORS für eine Ressource mithilfe der API-Gateway-Konsole automatisch die erforderlichen CORS-Header zur Ressource hinzugefügt.

(Nur bei privaten REST APIs) Überprüfen Sie die private DNS-Einstellung Ihres Schnittstellenendpunkts

Ermitteln Sie für private REST-APIs, ob privates DNS für den zugehörigen Schnittstellen-VPC-Endpunkt aktiviert ist.

Wenn privates DNS aktiviert ist

Stellen Sie sicher, dass Sie Ihre private API aus Ihrer Amazon Virtual Private Cloud (Amazon VPC) mit dem privaten DNS-Namen aufrufen.

Wenn privates DNS nicht aktiviert ist

Sie müssen den Datenverkehr manuell von der Aufruf-URL an die IP-Adressen des VPC-Endpunkts weiterleiten.

Hinweis: Unabhängig davon, ob privates DNS aktiviert ist oder nicht, müssen Sie die folgende Aufruf-URL verwenden:

https://api-id.execute-api.region.amazonaws.com/stage-name

Stellen Sie sicher, dass Sie die Werte für api-id, region und stage-name durch die erforderlichen Werte für Ihre API ersetzen. Weitere Informationen finden Sie unter Aufrufen einer privaten API.

Wichtig: Wenn CORS konfiguriert, privates DNS aber nicht aktiviert ist, beachten Sie die folgenden Einschränkungen:

  • Sie können keine endpunktspezifischen öffentlichen DNS-Namen verwenden, um von Ihrer Amazon VPC aus auf Ihre private API zuzugreifen.
  • Sie können die Host-Header-Option nicht verwenden, da Anforderungen von einem Browser die Bearbeitung des Host-Headers nicht zulassen.
  • Sie können den benutzerdefinierten Header x-apigw-api-id nicht verwenden, da er eine OPTIONS-Vorabanforderung auslöst, die den Header nicht enthält. API-Aufrufe mit dem Header x-apigw-api-id erreichen Ihre API nicht.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?