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

Letzte Aktualisierung;27.01.2021

Ich erhalte die Fehlermeldung „Kein „Access-Control-Allow-Origin“-Header ist in der angeforderten Ressource vorhanden“, wenn ich versuche, meine Amazon-API-Gateway-API aufzurufen. Wie können diese Fehler behoben werden?

Kurzbeschreibung

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

Weitere Informationen zum Aktivieren 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 aktiviert werden und kann mithilfe von API-Gateway-Konfigurationen oder Backend-Integrationen wie AWS Lambda verarbeitet werden.

Auflösung

Das folgende Beispiel zeigt, wie Sie den CORS-Fehler No ‘Access-Control-Allow-Origin’-Header beheben. Sie können jedoch ein ähnliches Verfahren verwenden, um alle CORS-Fehler zu beheben. 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.
  • Bei einer privaten REST-API wird die falsche Aufruf-URL aufgerufen oder der Datenverkehr wird nicht an den Endpunkt der Virtual Private Cloud (VPC) der Schnittstelle 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.
  • Verwenden Sie die Entwicklertools in Ihrem Browser, um die Anfrage- und Antwortparameter der fehlgeschlagenen API-Anfrage zu überprüfen.

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

Informationen zu REST-APIs finden Sie unter Aktivieren von CORS für eine Ressource mithilfe der API-Gateway-Konsole. Informationen zu HTTP-APIs finden Sie 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 OPTIONEN-Anforderungen im Voraus, auch wenn keine OPTIONEN-Route für Ihre API konfiguriert ist. Bei einer CORS-Anfrage fügt API Gateway die konfigurierten CORS-Header der Antwort einer Integration hinzu.

Stellen Sie beim Aktivieren von CORS sicher, dass Sie Folgendes tun:

  • Aktivieren Sie für Gateway-Antworten für die API <api-name> 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 „Fehlendes Authentifizierungstoken“.

  • Aktivieren Sie für Methoden das Kontrollkästchen für die OPTIONEN-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 Aktivieren von CORS in der API-Gateway-Konsole wird der Ressource eine OPTIONEN-Methode hinzugefügt, falls noch keine vorhanden ist. Es konfiguriert auch die Antwort 200 der OPTIONS-Methode mit den erforderlichen Access-Control-Allow-*-Headern. Wenn Sie CORS bereits über die Konsole aktiviert haben, überschreibt eine erneute Aktivierung vorhandene Werte.

Konfigurieren Sie Ihre REST-API-Integrationen, um die erforderlichen CORS-Header zurückzugeben

Konfigurieren Sie Ihre Backend-AWS Lambda-Funktion oder Ihren HTTP-Server, um die erforderlichen CORS-Header in seiner Antwort zu senden. Um eine Liste von Domänen in Access-Control-Allow-Origin zurückzugeben, müssen Sie Ihr Backend so konfigurieren, dass die Domänennamen in einer Liste als Wert für den Header Access-Control-Allow-Origin gesendet werden.

Wichtig: Wenn Sie eine Proxy-Integration verwenden, können Sie in API Gateway keine Integrationsantwort einrichten, um die Antwortparameter zu ändern, die vom Backend Ihrer API zurückgegeben werden. Bei einer Proxy-Integration leitet API Gateway die Backend-Antwort direkt an den Client weiter.

Wenn Sie eine Nicht-Proxy-Integration verwenden, richten Sie manuell eine Integrationsantwort in API Gateway ein, um die erforderlichen CORS-Header zurückzugeben.

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

Überprüfen Sie die private DNS-Einstellung Ihres Schnittstellenendpunkts (nur für private REST-APIs)

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

Wenn privates DNS für den Schnittstellenendpunkt aktiviert ist, rufen Sie Ihre private API aus Ihrer Amazon Virtual Private Cloud (Amazon VPC) mit dem privaten DNS-Namen auf, um CORS-Fehler zu vermeiden.

Wenn privates DNS nicht aktiviert ist, leiten Sie den Datenverkehr manuell von der Aufruf-URL an die IP-Adressen des VPC-Endpunkts weiter.

Hinweis: Verwenden Sie die folgende Aufruf-URL, unabhängig davon, ob privates DNS aktiviert ist oder nicht: 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 aktiviert ist, aber privates DNS 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 Anfragen 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 OPTIONEN-Anforderung im Voraus auslöst, die den Header nicht enthält. API-Aufrufe, die den Header x-apigw-api-id verwenden, erreichen Ihre API nicht.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?