Aktivieren von CORS für eine REST-API-Ressource - Amazon API Gateway

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aktivieren von CORS für eine REST-API-Ressource

Cross-Origin Resource Sharing (CORS) ist eine Browser-Sicherheitsfunktion, die Cross-Origin-HTTP-Anfragen einschränkt, die von Skripts eingeleitet werden, die im Browser ausgeführt werden.

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 an amazondomains.com)

  • Eine andere Subdomäne (z. B. von example.com an petstore.example.com)

  • Ein anderer Port (z. B. von example.com an example.com:10777)

  • Ein anderes Protokoll (z. B. von https://example.com an http://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- und POST-Anfragen erlaubt.

  • Wenn es sich um eine POST-Methodenanfrage handelt, muss sie einen Origin-Header enthalten.

  • Der Anfragenutzlast-Inhaltstyp ist text/plain, multipart/form-data oder application/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:'origin' enthalten.

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, dass der Browser eine Preflight-Anfrage an den Server sendet und auf die Genehmigung (oder Anforderung der Anmeldeinformationen) vom Server wartet, bevor die tatsächliche Anfrage gesendet wird. Sie müssen Ihre API so konfigurieren, dass sie eine entsprechende Antwort auf die Preflight-Anfrage sendet.

So erstellen Sie eine Preflight-Antwort:

  1. Erstellen Sie eine OPTIONS-Methode mit einer Mock-Integration.

  2. 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

  3. 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:'origin'-OR-Header für alle CORS-fähigen Methoden für mindestens alle 200 Antworten zurückgeben.

Aktivieren von CORS für Nicht-Proxy-Integrationen mithilfe der AWS Management Console

Sie können die verwenden AWS Management Console , 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-OriginAccess-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:

Node.js
export const handler = async (event) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Headers" : "Content-Type", "Access-Control-Allow-Origin": "https://www.example.com", "Access-Control-Allow-Methods": "OPTIONS,POST,GET" }, body: JSON.stringify('Hello from Lambda!'), }; return response; };
Python 3
import json def lambda_handler(event, context): return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Allow-Origin': 'https://www.example.com', 'Access-Control-Allow-Methods': 'OPTIONS,POST,GET' }, 'body': json.dumps('Hello from Lambda!') }