CORSfür REST APIs in API Gateway - APIAmazon-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.

CORSfür REST APIs in API Gateway

Die ursprungsübergreifende gemeinsame Nutzung von Ressourcen (CORS) ist eine Browser-Sicherheitsfunktion, die ursprungsübergreifende HTTP Anfragen einschränkt, die von Skripts initiiert werden, die im Browser ausgeführt werden. Weitere Informationen finden Sie unter Was ist? CORS .

Feststellen, ob der CORS Support aktiviert werden soll

Eine HTTPursprungsübergreifende Anfrage richtet sich an:

  • 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 zugreifen können API und eine Fehlermeldung erhalten, die Folgendes enthältCross-Origin Request Blocked, müssen Sie es möglicherweise aktivierenCORS.

Herkunftsübergreifende HTTP Anfragen können in zwei Typen unterteilt werden: einfache Anfragen und nicht einfache Anfragen.

Aktivierung CORS für eine einfache Anfrage

Eine HTTP Anfrage ist einfach, wenn alle der folgenden Bedingungen erfüllt sind:

  • Sie wird gegen eine API Ressource ausgegeben, die nur GETHEAD, und POST Anfragen zulässt.

  • 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 zusätzlichen Anforderungen, die in der CORSMozilla-Dokumentation für einfache Anfragen aufgeführt 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 ursprungsübergreifenden HTTP Anfragen sind keine einfachen Anfragen.

Aktivierung CORS für eine nicht einfache Anfrage

Wenn Ihre API Ressourcen nicht einfache Anfragen erhalten, müssen Sie je nach CORS Integrationstyp zusätzlichen Support aktivieren.

Aktivierung CORS für Nicht-Proxy-Integrationen

Für diese Integrationen verlangt das CORSProtokoll, dass der Browser eine Preflight-Anfrage an den Server sendet und auf die Genehmigung (oder eine Anfrage nach Anmeldeinformationen) vom Server wartet, bevor die eigentliche Anfrage gesendet wird. Sie müssen Ihren so konfigurierenAPI, dass eine entsprechende Antwort auf die Preflight-Anfrage gesendet wird.

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. Stellen Sie das Passthrough-Verhalten der Integration auf ein. NEVER In diesem Fall wird die Methodenanforderung eines Inhaltstyps, dem keine Zuordnung zugewiesen wurde, mit der Antwort HTTP 415 Nicht unterstützter Medientyp zurückgewiesen. Weitere Informationen finden Sie unter Integrations-Pass-Through-Verhalten.

  4. 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:'origin' Header Access-Control-Allow-Origin: '*' oder für alle CORS -aktivierten Methoden für mindestens alle 200 Antworten zurückgeben.

Aktivierung CORS für Nicht-Proxy-Integrationen mit dem AWS Management Console

Sie können das verwenden, um es AWS Management Console zu aktivieren. CORS APIGateway erstellt eine OPTIONS Methode und fügt den Access-Control-Allow-Origin Header zu Ihren vorhandenen Antworten zur Methodenintegration 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 -aktivierten Methoden für mindestens alle 200 Antworten zurückzugeben.

CORSUnterstützung für Proxy-Integrationen aktivieren

Bei einer Lambda-Proxyintegration oder HTTP Proxyintegration ist Ihr Backend für die Rückgabe der Access-Control-Allow-Headers Header Access-Control-Allow-OriginAccess-Control-Allow-Methods, und verantwortlich, da eine Proxyintegration keine Integrationsantwort zurückgibt.

Die folgenden Lambda-Beispielfunktionen 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!') }