CORSper REST APIs in API Gateway - Amazon API Gateway

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

CORSper REST APIs in API Gateway

La condivisione di risorse tra origini (CORS) è una funzionalità di sicurezza del browser che limita HTTP le richieste tra origini diverse avviate da script in esecuzione nel browser. Per ulteriori informazioni, consulta What is? CORS .

Determinare se abilitare CORS il supporto

Una HTTP richiesta multiorigine è quella che viene effettuata per:

  • Un dominio diverso (ad esempio da example.com a amazondomains.com)

  • Un sottodominio diverso (ad esempio da example.com a petstore.example.com)

  • Una porta diversa (ad esempio da example.com a example.com:10777)

  • Un protocollo diverso (ad esempio da https://example.com a http://example.com)

Se non riesci ad accedere al tuo API e ricevi un messaggio di errore che contieneCross-Origin Request Blocked, potrebbe essere necessario abilitarlo. CORS

HTTPLe richieste provenienti da più origini possono essere suddivise in due tipi: richieste semplici e richieste non semplici.

Abilitazione CORS per una richiesta semplice

Una HTTP richiesta è semplice se tutte le seguenti condizioni sono vere:

  • Viene emessa contro una API risorsa che consente solo GET e POST richieste. HEAD

  • Se si tratta di una richiesta di metodo POST, deve includere un'intestazione Origin.

  • Il tipo di contenuto del payload della richiesta è text/plain, multipart/form-data o application/x-www-form-urlencoded.

  • La richiesta non contiene intestazioni personalizzate.

  • Eventuali requisiti aggiuntivi elencati nella CORSdocumentazione di Mozilla per richieste semplici.

Per richieste di metodo POST multiorigine semplici, la risposta della risorsa deve includere l'intestazione Access-Control-Allow-Origin: '*' o Access-Control-Allow-Origin:'origin'.

Tutte le altre richieste provenienti da più origini sono HTTP richieste non semplici.

Attivazione di una CORS richiesta non semplice

Se le tue API risorse ricevono richieste non semplici, devi abilitare un CORS supporto aggiuntivo a seconda del tipo di integrazione.

Abilitazione CORS per integrazioni non proxy

Per queste integrazioni, il CORSprotocollo richiede che il browser invii una richiesta di preflight al server e attenda l'approvazione (o una richiesta di credenziali) dal server prima di inviare la richiesta effettiva. È necessario configurare l'invio API di una risposta appropriata alla richiesta di preflight.

Creazione di una risposta di verifica preliminare

  1. Creare un metodo OPTIONS per l'integrazione fittizia.

  2. Aggiungere le seguenti intestazioni di risposta alla risposta del metodo 200:

    • Access-Control-Allow-Headers

    • Access-Control-Allow-Methods

    • Access-Control-Allow-Origin

  3. Imposta il comportamento del passthrough di integrazione su. NEVER In questo caso, la richiesta del metodo di un tipo di contenuto non mappato verrà rifiutata con una risposta HTTP 415 Unsupported Media Type. Per ulteriori informazioni, consulta Comportamenti passthrough di integrazione.

  4. Immettere i valori per le intestazioni delle risposte. Per consentire tutte le origini, tutti i metodi e le intestazioni comuni, usare i seguenti valori di intestazione:

    • 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: '*'

Dopo aver creato la richiesta di preflight, è necessario restituire l'Access-Control-Allow-Origin:'origin'intestazione Access-Control-Allow-Origin: '*' o per tutti i metodi CORS -enabled per almeno tutte le 200 risposte.

Abilitazione delle CORS integrazioni non proxy utilizzando il AWS Management Console

È possibile utilizzare AWS Management Console per abilitare. CORS APIGateway crea un OPTIONS metodo e aggiunge l'Access-Control-Allow-Originintestazione alle risposte di integrazione dei metodi esistenti. Questo non sempre funziona e a volte è necessario modificare manualmente la risposta di integrazione per restituire l'Access-Control-Allow-Originintestazione per tutti i metodi CORS abilitati per almeno tutte le 200 risposte.

Abilitazione del CORS supporto per le integrazioni proxy

Per un'integrazione proxy Lambda o un'integrazione HTTP proxy, il backend è responsabile della restituzione delle Access-Control-Allow-Headers intestazioni Access-Control-Allow-OriginAccess-Control-Allow-Methods, e, perché un'integrazione proxy non restituisce una risposta di integrazione.

L'esempio seguente di funzioni Lambda restituisce le intestazioni richiesteCORS:

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!') }