Salta al contenuto

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

4 minuti di lettura
0

Quando cerco di invocare la mia API di Gateway Amazon API, ricevo il messaggio di errore "No 'Access-Control-Allow-Origin' header is present on the requested resource". Desidero risolvere questo errore e altri errori di condivisione delle risorse tra origini (CORS) da Gateway API.

Breve descrizione

Gli errori 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 Gateway API o da un'API HTTP, devi 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 REST API private, viene chiamato l'URL di invocazione 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 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 Abilitazione CORS su una risorsa tramite la console Gateway API.

Per le API HTTP

Segui le istruzioni in Configurazione di CORS per API HTTP in Gateway API.

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

Per 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 è 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.

Configura le integrazioni REST API per restituire le intestazioni CORS richieste

Per restituire le intestazioni CORS richieste nella risposta, configura la funzione Lambda di backend o il server proxy HTTP. Devi includere i domini consentiti nel valore dell'intestazione Access-Control-Allow-Origin come elenco.

Per le integrazioni proxy non puoi impostare una risposta di integrazione in Gateway API per modificare i parametri di risposta restituiti dal backend dell’API. In un'integrazione proxy, Gateway API inoltra la risposta di back-end direttamente al client.

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

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

Per le REST API private, determina se il DNS privato è attivato sull'endpoint VPC di 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 indirizzare manualmente il traffico dall'URL di invocazione agli indirizzi IP dell'endpoint VPC. Utilizza il seguente URL di invocazione (alias Amazon Route 53):

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

Nota: sostituisci rest-api-id, region, vpce-id e stage con i valori della tua API.

Se il DNS privato non è attivato, non puoi utilizzare nomi DNS pubblici specifici dell'endpoint per accedere all’API privata da Amazon VPC. Inoltre, non puoi utilizzare l'opzione di intestazione Host perché le richieste provenienti da un browser non consentono la modifica dell’intestazione 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 per un'API di Gateway API

Abilitazione di CORS per una risorsa tramite l'API di importazione di Gateway API