CORS für REST-APIs in API Gateway
Cross-Origin Resource Sharing (CORS)
Feststellung, ob die CORS-Unterstützung aktiviert werden soll
Cross-Origin-HTTP-Anfragen zielen auf Folgendes:
-
Eine andere Domäne (z. B. von
example.com
anamazondomains.com
) -
Eine andere Subdomäne (z. B. von
example.com
anpetstore.example.com
) -
Ein anderer Port (z. B. von
example.com
anexample.com:10777
) -
Ein anderes Protokoll (z. B. von
https://example.com
anhttp://example.com
)
Wenn Sie nicht auf Ihre API zugreifen können und eine Fehlermeldung erhalten, die Cross-Origin Request Blocked
enthält, müssen Sie möglicherweise CORS aktivieren.
Cross-Origin-HTTP-Anfragen lassen sich in zwei Arten unterteilen: einfache und nicht einfache Anfragen.
Aktivieren von CORS für eine einfache Anfrage
Eine HTTP-Anfrage ist einfach, wenn alle der folgenden Bedingungen erfüllt sind:
-
Sie wird für eine API-Ressource gestellt, die nur
GET
-,HEAD
- undPOST
-Anfragen erlaubt. -
Wenn es sich um eine
POST
-Methodenanfrage handelt, muss sie einenOrigin
-Header enthalten. -
Der Anfragenutzlast-Inhaltstyp ist
text/plain
,multipart/form-data
oderapplication/x-www-form-urlencoded
. -
Die Anfrage enthält keine benutzerdefinierten Header.
-
Alle weiteren Anforderungen, die in der Mozilla CORS-Dokumentation für einfache Anfragen
aufgelistet sind.
Bei einfachen quellenübergreifenden POST
-Methodenanfragen muss die Antwort Ihrer Ressource den Header Access-Control-Allow-Origin: '*'
oder Access-Control-Allow-Origin:
enthalten.'origin'
Alle anderen Cross-Origin-HTTP-Anfragen sind nicht einfache Anfragen.
Aktivieren von CORS für eine nicht einfache Anfrage
Wenn die Ressourcen Ihrer API nicht einfache Anfragen erhalten, müssen Sie je nach Integrationstyp zusätzliche CORS-Unterstützung aktivieren.
Aktivieren von CORS für Integrationen ohne Proxy
Für diese Integrationen erfordert das CORS-Protokoll
So erstellen Sie eine Preflight-Antwort:
Erstellen Sie eine
OPTIONS
-Methode mit einer Mock-Integration.-
Fügen Sie der Antwort der Methode 200 die folgenden Antwort-Header hinzu:
-
Access-Control-Allow-Headers
-
Access-Control-Allow-Methods
-
Access-Control-Allow-Origin
-
-
Setzen Sie das Integrations-Pass-Through-Verhalten auf
NEVER
. In diesem Fall wird die Methodenanforderung eines nicht zugeordneten Inhaltstyps mit der Antwort „HTTP 415 Unsupported Media Type“ zurückgewiesen. Weitere Informationen finden Sie unter Integrations-Pass-Through-Verhalten. -
Geben Sie Werte für die Antwort-Header ein. Verwenden Sie die folgenden Header-Werte, um alle Ursprünge, alle Methoden und allgemeine Header zuzulassen:
-
Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
-
Access-Control-Allow-Methods: '*'
-
Access-Control-Allow-Origin: '*'
-
Nachdem Sie die Preflight-Anfrage erstellt haben, müssen Sie den Access-Control-Allow-Origin: '*'
- oder Access-Control-Allow-Origin:
-OR-Header für alle CORS-fähigen Methoden für mindestens alle 200 Antworten zurückgeben.'origin'
Aktivierung von CORS für Nicht-Proxy-Integrationen mit der AWS Management Console
Sie können die AWS Management Console verwenden, um CORS zu aktivieren. API Gateway erstellt eine OPTIONS
-Methode und fügt den Access-Control-Allow-Origin
-Header zu Ihren vorhandenen Methodenintegrationsantworten hinzu. Dies funktioniert nicht immer und manchmal müssen Sie die Integrationsantwort manuell ändern, um den Access-Control-Allow-Origin
-Header für alle CORS-fähigen Methoden für mindestens alle 200 Antworten zurückzugeben.
Aktivieren der CORS-Unterstützung für Proxy-Integrationen
Bei einer Lambda-Proxy-Integration oder einer HTTP-Proxy-Integration ist Ihr Backend für die Rückgabe der Header Access-Control-Allow-Origin
, Access-Control-Allow-Methods
und Access-Control-Allow-Headers
verantwortlich, da eine Proxy-Integration keine Integrationsantwort zurückgibt.
Die folgenden Beispiel-Lambda-Funktionen geben die erforderlichen CORS-Header zurück: