CORS per REST API in Gateway API
CORS (Cross-origin resource sharing)
Determinazione della necessità di abilitare il supporto di CORS
Una richiesta HTTP multiorigine è una richiesta effettuata a:
-
Un dominio diverso (ad esempio da
example.comaamazondomains.com) -
Un sottodominio diverso (ad esempio da
example.comapetstore.example.com) -
Una porta diversa (ad esempio da
example.comaexample.com:10777) -
Un protocollo diverso (ad esempio da
https://example.comahttp://example.com)
Se non riesci ad accedere all'API e ricevi un messaggio di errore che contiene Cross-Origin Request Blocked, potresti dover abilitare CORS.
Le richieste HTTP multiorigine possono essere di due tipi: richieste semplici e richieste non semplici.
Abilitazione di CORS per una richiesta semplice
Una richiesta HTTP è semplice se si verificano tutte le condizioni seguenti:
-
Viene inviata a una risorsa API che permette solo richieste
GET,HEADePOST. -
Se si tratta di una richiesta di metodo
POST, deve includere un'intestazioneOrigin. -
Il tipo di contenuto del payload della richiesta è
text/plain,multipart/form-dataoapplication/x-www-form-urlencoded. -
La richiesta non contiene intestazioni personalizzate.
-
Eventuali requisiti aggiuntivi elencati nella documentazione di Mozilla CORS per le 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 HTTP multiorigine sono richieste non semplici.
Abilitazione di CORS per una richiesta non semplice
Se le risorse dell'API ricevono richieste non semplici, è necessario abilitare il supporto CORS aggiuntivo a seconda del tipo di integrazione.
Abilitazione di CORS per integrazioni non proxy
Per questo tipo di integrazioni, il protocollo CORS
Creazione di una risposta di verifica preliminare
Creare un metodo
OPTIONSper l'integrazione fittizia.-
Aggiungere le seguenti intestazioni di risposta alla risposta del metodo 200:
-
Access-Control-Allow-Headers -
Access-Control-Allow-Methods -
Access-Control-Allow-Origin
-
-
Impostare il comportamento passthrough di integrazione su
NEVER. In questo caso, la richiesta di metodo di un tipo di contenuto non mappato sarà rifiutata con la risposta Tipo di supporto non compatibile HTTP 415. Per ulteriori informazioni, consulta Comportamento della richiesta di metodo per i payload senza modelli di mappatura per REST API in Gateway API. -
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: 'DELETE,GET,HEAD,OPTIONS,PUT,POST,PATCH' -
Access-Control-Allow-Origin: '*'
-
Dopo aver creato la richiesta di verifica preliminare, è necessario restituire l'intestazione Access-Control-Allow-Origin: '*' o Access-Control-Allow-Origin: per tutti i metodi abilitati per CORS per almeno tutte le 200 risposte.'origin'
Abilitazione di CORS per integrazioni non proxy utilizzando la AWS Management Console
È possibile utilizzare la AWS Management Console per abilitare CORS. Gateway Amazon API crea un metodo OPTIONS e aggiunge l'intestazione Access-Control-Allow-Origin alle risposte di integrazione del metodo esistente. Questo non sempre funziona e talvolta è necessario modificare manualmente la risposta di integrazione per restituire l'intestazione Access-Control-Allow-Origin di tutti i metodi abilitati per CORS per almeno tutte le 200 risposte.
Se i tipi di supporti binari sono impostati su */* per l’API, quando Gateway API crea un metodo OPTIONS, modificare contentHandling in CONVERT_TO_TEXT.
Il comando update-integration seguente modifica contentHandling in CONVERT_TO_TEXT per una richiesta di integrazione:
aws apigateway update-integration \ --rest-api-idabc123\ --resource-idaaa111\ --http-method OPTIONS \ --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT'
Il comando update-integration-response seguente modifica contentHandling in CONVERT_TO_TEXT per una risposta di integrazione:
aws apigateway update-integration-response \ --rest-api-idabc123\ --resource-idaaa111\ --http-method OPTIONS \ --status-code 200 \ --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT'
Abilitazione del supporto di CORS per le integrazioni proxy
Per un'integrazione proxy Lambda o un'integrazione con proxy HTTP, il back-end è responsabile della restituzione delle intestazioni Access-Control-Allow-Origin, Access-Control-Allow-Methods e Access-Control-Allow-Headers , perché un'integrazione proxy non restituisce una risposta di integrazione.
Le seguenti funzioni Lambda di esempio restituiscono le intestazioni CORS richieste: