Cross-Origin Resource Sharing (CORS) - AWS SDK for JavaScript

La guida API di riferimento AWS SDK for JavaScript V3 descrive in dettaglio tutte le API operazioni per la AWS SDK for JavaScript versione 3 (V3).

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Cross-Origin Resource Sharing (CORS)

Il Cross-origin resource sharing, o CORS, è una caratteristica di sicurezza dei moderni browser Web. In questo modo i browser Web possono negoziare quali domini possono fare richieste di siti Web o servizi esterni.

CORS è fondamentale quando si sviluppano applicazioni di tipo browser con AWS SDK for JavaScript perché la maggior parte delle richieste di risorse vengono inviate a un dominio esterno, ad esempio l'endpoint di un servizio Web. Se JavaScript l'ambiente utilizza la sicurezza CORS, è necessario configurare CORS con il servizio.

CORS determina se consentire la condivisione di risorse in una richiesta tra origini diverse in base a quanto segue:

  • Il dominio specifico che effettua la richiesta

  • Il tipo di richiesta HTTP effettuata (GET, PUT, POST, DELETE e così via)

Come funziona CORS

Nel caso più semplice, lo script di browser invia una richiesta GET per una risorsa da un server in un altro dominio. A seconda della configurazione CORS del server, se la richiesta proviene da un dominio che è autorizzato a inviare le richieste GET, il server cross-origin risponde restituendo la risorsa richiesta.

Se il dominio che effettua la richiesta o il tipo di richiesta HTTP non è autorizzato, la richiesta viene negata. Tuttavia, CORS permette di preparare la richiesta prima dell'invio. In questo caso, viene effettuata una richiesta preliminare in cui viene inviata la richiesta di accesso OPTIONS. Se la configurazione CORS del server cross-origin consente di concedere l'accesso al dominio richiedente, il server invia una risposta preliminare che elenca tutti i tipi di richieste HTTP che il dominio può effettuare sulla risorsa richiesta.

Flusso di elaborazione per le richieste CORS

È richiesta la configurazione CORS?

I bucket Amazon S3 richiedono la configurazione CORS prima di poter eseguire operazioni su di essi. In alcuni JavaScript ambienti CORS potrebbe non essere applicato e pertanto la configurazione di CORS non è necessaria. Ad esempio, se ospiti l'applicazione da un bucket Amazon S3 e accedi alle risorse da *.s3.amazonaws.com o da qualche altro endpoint specifico, le tue richieste non accederanno a un dominio esterno. Pertanto, questa configurazione non richiede CORS. In questo caso, CORS viene ancora utilizzato per servizi diversi da Amazon S3.

Configurare CORS per un bucket Amazon S3

Puoi configurare un bucket Amazon S3 per utilizzare CORS nella console Amazon S3.

Se stai configurando CORS nella console di gestione dei servizi AWS Web, devi usare JSON per creare una configurazione CORS. La nuova console di gestione dei servizi AWS Web supporta solo le configurazioni JSON CORS.

Importante

Nella nuova console di gestione dei servizi AWS Web, la configurazione CORS deve essere JSON.

  1. Nella console di gestione dei servizi AWS Web, apri la console Amazon S3, trova il bucket che desideri configurare e seleziona la relativa casella di controllo.

  2. Nel riquadro che si apre, scegli Autorizzazioni.

  3. Nella scheda Autorizzazioni, scegliete Configurazione CORS.

  4. Immettete la configurazione CORS nel CORS Configuration Editor, quindi scegliete Salva.

Una configurazione CORS è un file XML che contiene una serie di regole all'interno di un <CORSRule>. Una configurazione può avere massimo 100 regole. Una regola è definita da uno dei seguenti tag:

  • <AllowedOrigin>— Specificate le origini del dominio a cui consentite di effettuare richieste tra domini.

  • <AllowedMethod>— Specificate il tipo di richiesta consentita (GET, PUT, POST, DELETE, HEAD) nelle richieste tra domini.

  • <AllowedHeader>— Speciifica le intestazioni consentite in una richiesta di preflight.

Per esempi di configurazioni, vedi Come posso configurare CORS sul mio bucket? nella Guida per l'utente di Amazon Simple Storage Service.

Esempio di configurazione CORS

Il seguente esempio di configurazione CORS consente a un utente di visualizzare, aggiungere, rimuovere o aggiornare oggetti all'interno di un bucket dal dominio. example.org Tuttavia, ti consigliamo di estendere l'ambito <AllowedOrigin> al dominio del tuo sito web. È possibile specificare "*" per consentire l'origine.

Importante

Nella nuova console S3, la configurazione CORS deve essere JSON.

XML
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>https://example.org</AllowedOrigin> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> <ExposeHeader>ETag</ExposeHeader> <ExposeHeader>x-amz-meta-custom-header</ExposeHeader> </CORSRule> </CORSConfiguration>
JSON
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "HEAD", "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "https://www.example.org" ], "ExposeHeaders": [ "ETag", "x-amz-meta-custom-header"] } ]

Questa configurazione non autorizza l'utente a eseguire azioni nel bucket. Abilita il modello di sicurezza del browser per consentire una richiesta ad Amazon S3. Le autorizzazioni devono essere configurate tramite i permessi dei bucket o i permessi dei ruoli IAM.

Puoi utilizzarlo ExposeHeader per consentire all'SDK di leggere le intestazioni di risposta restituite da Amazon S3. Ad esempio, se leggi l'ETagintestazione da un caricamento in più parti PUT o in più parti, devi includere il ExposeHeader tag nella configurazione, come mostrato nell'esempio precedente. Il kit SDK è in grado di accedere solo alle intestazioni esposte attraverso la configurazione CORS. Se si impostano i metadati nell'oggetto, i valori vengono restituiti come intestazioni con il prefisso x-amz-meta-, ad esempio x-amz-meta-my-custom-header, e devono essere esposti in modo analogo.