Come posso risolvere gli errori CORS dalla mia API di Gateway API?

5 minuti di lettura
0

Ricevo il messaggio di errore "No 'Access-Control-Allow-Origin' header is present on the requested resource" quando cerco di richiamare la mia API di Gateway Amazon API. Voglio risolvere questo e altri errori CORS da Gateway API.

Breve descrizione

Gli errori CORS (Cross-Origin Resource Sharing) si verificano quando un server non restituisce le intestazioni HTTP richieste dallo standard CORS. Per risolvere un errore CORS da una REST API di Gateway API o da un'API HTTP, è necessario riconfigurare l'API per soddisfare lo standard CORS.

Per ulteriori informazioni su come configurare CORS per le REST API, consulta Abilitazione di CORS per una risorsa REST API. Per le API HTTP, consulta Configurazione di CORS per un'API HTTP.

Nota: CORS deve essere configurato a livello di risorsa e può essere gestito tramite le configurazioni di Gateway API o le integrazioni back-end, come AWS Lambda.

Soluzione

La procedura di esempio seguente mostra come risolvere il problema relativo all'errore CORS No ‘Access-Control-Allow-Origin’ header present. Tuttavia, è possibile utilizzare una procedura simile per risolvere tutti gli errori CORS. Ad esempio: gli errori Method not supported under Access-Control-Allow-Methods header e gli errori No ‘Access-Control-Allow-Headers’ headers present.

Nota: l'errore No 'Access-Control-Allow-Origin' header present può verificarsi per uno dei seguenti motivi:

  • L'API non è configurata con un metodo OPTIONS che restituisce le intestazioni CORS richieste.
  • Non è configurato un altro tipo di metodo (come GET, PUT o POST) per restituire le intestazioni CORS richieste.
  • Un'API con un’integrazione proxy o con un’integrazione non proxy non è configurata per restituire le intestazioni CORS richieste.
  • Per le REST API private, viene effettuata una chiamata all'URL di richiamo errato o il traffico viene instradato verso l'endpoint del cloud privato virtuale (VPC).

Conferma della causa dell'errore

Puoi confermare la causa di un errore CORS da Gateway API in due modi:

  • Crea un file di archivio HTTP (HAR) quando richiami la tua API. Quindi, conferma la causa dell'errore nel file controllando le intestazioni nei parametri restituiti nella risposta API.
    -o-
  • Utilizza gli strumenti di sviluppo presenti nel tuo browser per controllare i parametri di richiesta e risposta della richiesta API non riuscita.

Configurazione di CORS sulla risorsa API che riporta l'errore

Per le REST API

Segui le istruzioni riportate in Abilitazione CORS su una risorsa tramite la console API Gateway.

Per le API HTTP

Segui le istruzioni riportate in Configurazione di CORS per un'API HTTP.

Importante: se configuri CORS per un'API HTTP, Gateway API invia automaticamente una risposta alle richieste OPTIONS preflight. Tale risposta viene inviata anche se non è stata configurata una route OPTIONS per l'API. Per una richiesta CORS, Gateway API aggiunge le intestazioni CORS configurate alla risposta di un'integrazione.

Durante la configurazione di CORS sulla tua risorsa API, assicurati di eseguire le operazioni seguenti:

  • In Risposte del gateway per <api-name> l'API, scegli le caselle di controllo DEFAULT 4XX e DEFAULT 5XX.

Nota: quando selezioni queste opzioni predefinite, Gateway API risponde con le intestazioni CORS richieste, anche nel caso in cui una richiesta non raggiunga l'endpoint. Ad esempio, se una richiesta include un percorso di risorsa non corretto, Gateway API risponde comunque con un messaggio di errore 403 "Token di autenticazione mancante".

  • In Metodi, scegli la casella relativa al metodo OPTIONS, se non è già selezionata. Scegli anche le caselle relative a tutti gli altri metodi disponibili per le richieste CORS. Ad esempio: GET, PUT e POST.

Nota: la configurazione di CORS nella console Gateway API aggiunge il metodo OPTIONS alla risorsa nel caso in cui non ne esista già uno. Inoltre, configura le 200 risposte del metodo OPTIONS con le intestazioni Access-Control-Allow-* richieste. Se CORS è già stato configurato utilizzando la console, la nuova impostazione sovrascriverà tutti i valori esistenti.

Configurazione delle integrazioni REST API per restituire le intestazioni CORS richieste

Configura la funzione AWS Lambda di back-end o il server HTTP per inviare le intestazioni CORS richieste nella risposta. Tieni presente quanto segue:

  • I domini consentiti devono essere inclusi nel valore dell’intestazione Access-Control-Allow-Origin come elenco.
  • Per le integrazioni proxy non è possibile impostare una risposta di integrazione in Gateway API per modificare i parametri della risposta restituita dal back-end dell'API. In un'integrazione proxy, Gateway API inoltra la risposta di back-end direttamente al client.
  • Se utilizzi un'integrazione non proxy, devi configurare manualmente una risposta di integrazione in Gateway API per restituire le intestazioni CORS richieste.

Nota: per le API con integrazione non proxy, la configurazione di CORS su una risorsa tramite la console Gateway API aggiunge automaticamente le intestazioni CORS richieste alla risorsa.

(Solo per REST API private) Controllo dell'impostazione del DNS privato per l'endpoint dell'interfaccia

Per le REST API private, determina se il DNS privato è abilitato per l'endpoint VPC dell'interfaccia associato.

Se il DNS privato è attivato

Assicurati di richiamare la tua API privata da Amazon Virtual Private Cloud (Amazon VPC) utilizzando il nome DNS privato.

Se il DNS privato non è attivato

Devi instradare manualmente il traffico dall'URL di richiamo agli indirizzi IP dell'endpoint VPC.

Nota: è necessario utilizzare il seguente URL di richiamo, indipendentemente dal fatto che il DNS privato sia attivato o meno:

https://api-id.execute-api.region.amazonaws.com/stage-name

Assicurati di sostituire i valori relativi ad api-id, region e stage-name con i valori richiesti per la tua API. Per ulteriori informazioni, consulta Come invocare un'API privata.

Importante: se CORS è configurato quando il DNS privato non è attivato, tieni presente le seguenti limitazioni:

  • Non puoi utilizzare nomi DNS pubblici specifici per gli endpoint per accedere alla tua API privata da Amazon VPC.
  • Non puoi utilizzare l'opzione dell’intestazione Host perché le richieste provenienti da un browser non ne consentono la manipolazione.
  • Non puoi utilizzare l’intestazione personalizzata x-apigw-api-id in quanto avvia una richiesta OPTIONS preflight che non include l'intestazione. Le chiamate API che utilizzano l’intestazione x-apigw-api-id non raggiungeranno la tua API.

Informazioni correlate

Test di CORS

Abilitazione di CORS su una risorsa tranute l'API di importazione di API Gateway