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

Lesedauer: 4 Minute
0

Ich erhalte die Fehlermeldung „No 'Access-Control-Allow-Origin' header is present on the requested ressource“, wenn ich versuche, meine API bei Amazon API Gateway aufzurufen. Ich möchte diesen Fehler und andere CORS-Fehler von 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.

Hinweis: Sie müssen CORS auf Ressourcenebene konfigurieren. Verwenden Sie API-Gateway-Konfigurationen oder Backend-Integrationen wie AWS Lambda.

Behebung

Zusätzlich zum CORS-Fehler No 'Access-Control-Allow-Origin' header present können Sie mit folgendem Verfahren auch alle anderen CORS-Fehler beheben. Andere CORS-Fehler sind zum Beispiel Method not supported under Access-Control-Allow-Methods header und No 'Access-Control-Allow-Headers' headers present.

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.
  • Es sind keine anderen Methodentypen wie GET, PUT oder POST so konfiguriert, dass sie die erforderlichen CORS-Header zurückgeben.
  • Es ist keine API mit Proxy-Integration oder Nicht-Proxy-Integration so konfiguriert, dass sie die erforderlichen CORS-Header zurückgibt.
  • Für private REST-APIs wird die falsche Aufruf-URL aufgerufen. Oder der Datenverkehr wird nicht an den VPC-Endpunkt (Virtual Private Cloud) der Schnittstelle weitergeleitet.

Bestätigen der Fehlerursache

Ergreifen Sie die folgenden Maßnahmen:

  • Erstellen Sie eine HTTP Archive (HAR)-Datei, wenn Sie Ihre API aufrufen. Überprüfen Sie dann die Parameter-Header, die in der API-Antwort zurückgegeben werden, um die Ursache des Dateifehlers zu bestätigen.
  • Verwenden Sie die Entwicklertools in Ihrem Browser, um die Anfrage- und Antwortparameter der fehlgeschlagenen API-Anfrage zu überprüfen.

Konfigurieren von CORS für die ausgefallene API-Ressource

Für REST-APIs

Folgen Sie den Anweisungen unter Turn on CORS on a resource using the API Gateway console.

Für HTTP-APIs

Folgen Sie den Anweisungen unter Configuring CORS for an HTTP API.

Wenn Sie CORS auf Ihrer API-Ressource konfigurieren, wählen Sie die folgenden Optionen aus:

Wählen Sie für Gateway-Antworten die Optionen DEFAULT 4XX und DEFAULT 5XX aus. Wenn Sie DEFAULT 4XX und DEFAULT 5XX 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 dennoch mit dem Fehler 403 "Missing Authentication Token".

Wenn nicht bereits OPTIONS für Access-Control-Allow-Methods ausgewählt ist, wählen Sie dies und alle anderen Methoden aus, die für CORS-Anfragen verfügbar sind, wie GET, PUT und POST. Die API-Gateway-Konsole konfiguriert die 200-Antwort der OPTIONS-Methode mit den erforderlichen Access-Control-Allow-Headern und überschreibt vorhandene Werte in der neu konfigurierten Ressource.

Konfigurieren Ihrer REST-API-Integrationen für das Zurückgeben der erforderlichen CORS-Header

Konfigurieren Sie die Lambda-Funktion in Ihrem Backend oder Ihren HTTP-Server so, dass die erforderlichen CORS-Header in der Antwort gesendet werden. 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. Verwenden Sie die API-Gateway-Konsole, um CORS zu konfigurieren, da die Konsole der konfigurierten Ressource automatisch die erforderlichen CORS-Header hinzufügt.

(Nur für private REST-APIs) Überprüfen der privaten 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

Verwenden Sie den privaten DNS-Namen, um Ihre private API aus Ihrer Amazon Virtual Private Cloud (Amazon VPC) heraus aufzurufen.

Wenn privates DNS nicht aktiviert ist

Sie müssen den Datenverkehr manuell von der Aufruf-URL zu den IP-Adressen des VPC-Endpunkts weiterleiten. Verwenden Sie die folgende Aufruf-URL (Route53-Alias):

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

Hinweis: Ersetzen Sie rest-api-id, region, vpce-id und stage durch Ihre API-Werte. Weitere Informationen finden Sie unter How to invoke a private API.

Wenn privates DNS nicht aktiviert ist, können Sie 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.

Für private APIs können Sie 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.

Hinweis: Stellen Sie sicher, dass die Autorisierung in der OPTIONS-Methode Ihrer API deaktiviert ist.

Verwandte Informationen

CORS testen

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