In che modo è possibile risolvere gli errori CORS dalla mia API di API Gateway?

6 minuti di lettura
0

Ricevo il messaggio di errore "Nessuna intestazione 'Access-Control-Allow-Origin' presente nella risorsa richiesta" quando cerco di richiamare la mia API del Gateway Amazon API. Come posso risolvere questo errore e altri errori CORS da API Gateway?

Breve descrizione

Gli errori Cross-Origin Resouce Sharing (CORS) si verificano quando un server non restituisce le intestazioni HTTP richieste dallo standard CORS. Per risolvere un errore CORS da una REST API di API Gateway 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 Configurazione 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 la configurazione API Gateway o tramite le integrazioni back-end, come AWS Lambda.

Risoluzione

L’esempio seguente mostra come risolvere il problema relativo all’errore CORS Nessuna intestazione 'Access-Control-Allow-Origin' presente. Tuttavia è possibile utilizzare una procedura simile per risolvere tutti gli errori CORS. Ad esempio gli errori Metodo non supportato nell’header Access-Control-Allow-Methods e gli errori Nessun header 'Access-Control-Allow-Headers' presente.

Nota: l’errore Nessun header 'Access-Contro-Allow-Origin' presente può verificarsi per una delle ragioni seguenti:

  • L’API non è configurata con un metodo OPTIONS che restituisca gli header CORS richiesti.
  • Un altro tipo di metodo (come GET, PUT o POST) non è configurato per restituire gli header CORS richiesti.
  • Un’API con una integrazione proxy o con una integrazione non proxy non è configurata per restituire le intestazioni CORS richieste.
  • Per un’API REST privata, viene chiamato un URL di richiamo non corretto o il traffico non viene instradato verso l’endpoint del cloud privato virtuale (VPC).

Conferma della causa dell'errore

Esistono due modi per confermare la causa di un errore CORS da API Gateway:

  • creare un file d’archivio HTTP (HAR) quando richiami la tua API. Quindi conferma la causa dell’errore nel file controllando le intestazioni nei parametri restituiti nella risposta dell’API.
    -oppure-
  • Utilizza gli strumenti di sviluppo nel tuo browser per controllare la richiesta e i parametri di 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 Configurazione di CORS su una risorsa utilizzando 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, API Gateway invia automaticamente una risposta alle richieste OPTIONS di verifica preliminare. Questa risposta viene inviata anche se non è stata configurata una route OPTIONS per la tua API. Per una richiesta CORS, API Gateway aggiunge le intestazioni CORS configurate alla risposta da un’integrazione.

Durante la configurazione di CORS sulla tua risorsa API, assicurati di fare quanto segue:

  • Per le risposte Gateway per l’API <nome-api>, scegli le caselle di controllo DEFAULT 4XX e DEFAULT 5XX.

Nota: quando selezioni queste opzioni per impostazione predefinita, API Gateway risponde con gli header CORS richiesti, anche nel caso in cui una richiesta non raggiunga l’endpoint. Ad esempio, se una richiesta include un percorso di risorsa non corretto, API Gateway risponde comunque con un messaggio di errore 403 "Token di autenticazione mancante".

  • Per 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 API Gateway aggiunge il metodo OPTIONS alle risorse 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 sua nuova configurazione sovrascriverà tutti i valori esistenti.

Configurazione delle integrazioni dell’API REST 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:

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

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

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

Se il DNS privato è abilitato

Assicurati di chiamare la tua API privata dall'interno del tuo Amazon Virtual Private Cloud (Amazon VPC) utilizzando il nome DNS privato.

Se il DNS privato non è abilitato

Dovrai 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 valore relativi ad api-id, region e stage-name con i valori richiesti per la tua API. Per ulteriori informazioni consulta la sezione Come richiamare un'API privata.

Importante: se CORS è configurato quando un DNS privato non è abilitato, tieni presenti i seguenti limiti:

  • Non è possibile utilizzare nomi DNS pubblici specifici per gli endpoint per accedere alla tua API privata dal tuo Amazon VPC.
  • Non è possibile utilizzare l’opzione dell’intestazione Host perché le richieste provenienti da un browser non permettono la manipolazione di una intestazione Host.
  • Non è possibile utilizzare l’intestazione personalizzata x-apigw-api-id perché attiva una richiesta OPTIONS preliminare 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 utilizzando la console API Gateway