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

Lesedauer: 5 Minute
0

Ich erhalte die Fehlermeldung „No ‚Access-Control-Allow-Origin‘ header is present on the requested ressource“, wenn ich versuche, meine Amazon API Gateway API aufzurufen. Ich möchte diesen Fehler und andere CORS-Fehler vom API-Gateway aus beheben.

Kurzbeschreibung

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

Weitere Informationen zur Konfiguration von CORS für REST-APIs finden Sie unter CORS für eine REST-API-Ressource aktivieren. Informationen zu HTTP APIs finden Sie unter CORS für eine HTTP API konfigurieren.

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

Behebung

Das folgende Beispielverfahren zeigt, wie der CORS-Fehler No ‚Access-Control-Allow-Origin‘ header present behoben werden kann. Sie können jedoch ein ähnliches Verfahren verwenden, um alle CORS-Fehler zu beheben. Zum Beispiel: Die Fehler Method not supported under Access-Control-Allow-Methods header und No ‚Access-Control-Allow-Headers‘ headers present.

**Hinweis:**Der Fehler No ‚Access-Control-Allow-Origin‘ Header present kann aus einem der folgenden Gründe auftreten:

  • Die API ist nicht mit einer OPTIONS-Methode konfiguriert, die die erforderlichen CORS-Header zurückgibt.
  • Ein anderer Methodentyp (wie GET, PUT oder POST) ist nicht so konfiguriert, dass er die erforderlichen CORS-Header zurückgibt.
  • Eine API mit Proxy-Integration oder Nicht-Proxy-Integration ist nicht so konfiguriert, dass sie die erforderlichen CORS-Header zurückgibt.
  • (Nur für private REST-APIs) Die falsche Aufruf-URL wird aufgerufen, oder der Datenverkehr wird nicht an den Virtual Private Cloud (VPC)-Endpunkt der Schnittstelle weitergeleitet.

Bestätigen der Fehlerursache

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

  • Erstellen Sie eine HTTP Archive (HAR)-Datei, wenn Sie Ihre API aufrufen. Bestätigen Sie dann die Ursache des Fehlers in der Datei, indem Sie die Header in den in der API-Antwort zurückgegebenen Parametern überprüfen.
    -oder-
  • Verwenden Sie die Entwicklertools in Ihrem Browser, um die Anforderungs- und Antwortparameter der fehlgeschlagenen API-Anfrage zu überprüfen.

Konfigurieren Sie CORS auf Ihrer API-Ressource, bei der der Fehler auftritt

Für REST-APIs

Folgen Sie den Anweisungen, um CORS auf einer Ressource mithilfe der API-Gateway-Konsole zu aktivieren.

Für HTTP-APIs

Folgen Sie den Anweisungen unter CORS für eine HTTP-API konfigurieren.

**Wichtig:**Wenn Sie CORS für eine HTTP-API konfigurieren, sendet API-Gateway automatisch eine Antwort auf Preflight-OPTIONS-Anfragen. Diese Antwort wird gesendet, auch wenn für Ihre API keine OPTIONS-Route konfiguriert ist. Für eine CORS-Anfrage fügt API-Gateway die konfigurierten CORS-Header zur Antwort einer Integration hinzu.

Stellen Sie bei der Konfiguration von CORS auf Ihrer API-Ressource sicher, dass Sie Folgendes tun:

  • Für Gateway-Antworten für <api-name> API, wählen Sie die Kontrollkästchen DEFAULT 4XX und DEFAULT 5XX.

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

  • Wählen Sie unter Methoden das Kontrollkästchen für die OPTIONS-Methode aus, falls es nicht bereits aktiviert ist. Aktivieren Sie außerdem die Kontrollkästchen für alle anderen Methoden, die für CORS-Anfragen verfügbar sind. Zum Beispiel: GET, PUT und POST.

**Hinweis:**Bei der Konfiguration von CORS in der API-Gateway-Konsole wird der Ressource eine OPTIONS-Methode hinzugefügt, falls noch keine existiert. Sie konfiguriert auch die 200-Antwort der OPTIONS-Methode mit den erforderlichen Access-Control-Allow-*-Headern. Wenn Sie CORS bereits mit der Konsole konfiguriert haben, überschreibt eine erneute Konfiguration alle vorhandenen Werte.

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 der Antwort gesendet werden. Beachten Sie Folgendes:

  • Zulässige Domains müssen als Liste im Header-Wert Access-Control-Allow-Origin enthalten sein.
  • Für 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, um die erforderlichen CORS-Header zurückzugeben.

**Hinweis:**Bei APIs mit einer Nicht-Proxy-Integration werden bei der Konfiguration von CORS auf einer Ressource mithilfe der API-Gateway-Konsole der Ressource automatisch die erforderlichen CORS-Header hinzugefügt.

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

Stellen Sie für private REST-APIs fest, ob privates DNS auf dem zugehörigen Schnittstellen-VPC-Endpunkt aktiviert ist.

Wenn privates DNS aktiviert ist

Stellen Sie sicher, dass Sie Ihre private API von Ihrer Amazon Virtual Private Cloud (Amazon VPC) aus aufrufen und dabei den privaten DNS-Namen verwenden.

Wenn privates DNS nicht aktiviert ist

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

**Hinweis:**Sie müssen die folgende Aufruf-URL verwenden, 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 So rufen Sie eine private API auf.

**Wichtig:**Wenn CORS konfiguriert wird, wenn 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 Option Host-Header nicht verwenden, da Anfragen von einem Browser keine Bearbeitung des Host-Headers zulassen.
  • Sie können den benutzerdefinierten Header x-apigw-api-id nicht verwenden, da er eine Preflight-OPTIONS-Anfrage initiiert, die den Header nicht enthält. API-Aufrufe, die den Header x-apigw-api-id verwenden, erreichen Ihre API nicht.

Ähnliche Informationen

CORS testen

CORS für eine Ressource mithilfe der API Gateway Import API aktivieren