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

4 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. Desidero 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.

Nota: è necessario configurare CORS a livello di risorsa. Usa ke configurazioni Gateway API o le integrazioni backend, come AWS Lambda.

Risoluzione

Oltre all'errore CORS No 'Access-Control-Allow-Origin' header present è possibile utilizzare la seguente procedura per risolvere tutti gli errori CORS. Altri errori CORS includono il Method not supported under Access-Control-Allow-Methods header e No 'Access-Control-Allow-Headers' headers present.

L’errore No 'Access-Control-Allow-Origin' header present può verificarsi per i seguenti motivi:

  • Non hai configurato l'API con un metodo OPTIONS che restituisce le intestazioni CORS richieste.
  • Non hai configurato altri tipi di metodo, come GET, PUT o POST, per restituire le intestazioni CORS richieste.
  • Non hai configurato un’API con integrazione proxy o integrazione non proxy per restituire le intestazioni CORS richieste.
  • Per le API REST private, viene chiamato l'URL di richiamo errato. Oppure il traffico non viene indirizzato all'endpoint del cloud privato virtuale (VPC) dell'interfaccia.

Verifica la causa dell'errore

Esegui le azioni seguenti:

  • Quando invochi l’API, crea un file HTTP Archive (HAR). Quindi, controlla le intestazioni dei parametri restituite nella risposta API per verificare la causa dell'errore del file.
  • Utilizza gli strumenti di sviluppo presenti nel tuo browser per controllare i parametri di richiesta e risposta della richiesta API non riuscita.

Configurare CORS nella risorsa API non riuscita

Per le REST API

Segui le istruzioni riportate in Turn on CORS on a resource using the API Gateway console.

Per le API HTTP

Segui le istruzioni riportate in Configuring CORS for an HTTP API.

Quando configuri CORS nella risorsa API, seleziona le seguenti opzioni:

Per le risposte del Gateway, seleziona DEFAULT 4XX e DEFAULT 5XX.Quando selezioni DEFAULT 4XX e DEFAULT 5XX, 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".

Per Access-Control-Allow-Methods, se OPTIONS non è già selezionato, selezionalo e seleziona anche tutti gli altri metodi disponibili per le richieste CORS, come GET, PUT e POST. La console Gateway API configura la risposta 200 del metodo OPTIONS con le intestazioni Access-Control-Allow richieste e sovrascrive i valori esistenti nella risorsa riconfigurata.

Configurazione delle integrazioni REST API per restituire le intestazioni CORS richieste

Per restituire le intestazioni CORS richieste nella sua risposta, configura la funzione Lambda di backend o il server HTTP. È necessario includere i domini consentiti 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 che l’API restituisce al backend. In un'integrazione proxy, Gateway API inoltra la risposta di back-end direttamente al client.

Per integrazioni non proxy, devi configurare manualmente una risposta di integrazione in Gateway API per restituire le intestazioni CORS richieste. Usa la console Gateway API per configurare CORS perché la console aggiunge automaticamente le intestazioni CORS richieste alla risorsa configurata.

(Solo per REST API private) Controlla l'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.

Il DNS privato è attivato

Usa il nome DNS privato per invocare l’API privata da Amazon Virtual Private Cloud (Amazon VPC).

Il DNS privato non è attivato

Devi instradare manualmente il traffico dall'URL di richiamo agli indirizzi IP dell'endpoint VPC. Usa il seguente URL di richiamo (alias Route53):

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

Nota: sostituisci rest-api-id, region, vpce-id e stage con i tuoi valori dell’API. Per ulteriori informazioni, consulta How to invoke a private API.

Se il DNS privato non è attivato, non puoi utilizzare nomi DNS pubblici specifici degli endpoint per accedere all’API privata da Amazon VPC. Inoltre, non puoi utilizzare l'opzione dell’intestazione Host perché le richieste provenienti da un browser non consentono la manipolazione dell’host.

Per le API private, 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 raggiungono l’API.

Nota: assicurati che l'autorizzazione sia disattivata nel metodo OPTIONS della tua API.

Informazioni correlate

Test di CORS

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