Configurazione Esempi di configurazione
Il criterio della stessa origine è un criterio di sicurezza applicato alle applicazioni web lato client (come i browser web) per impedire interazioni tra risorse provenienti da origini diverse. Sebbene sia utile per prevenire comportamenti dannosi,
questa misura di sicurezza impedisce anche le interazioni legittime tra origini
conosciute. Ad esempio, uno script su una pagina ospitata all'indirizzo example.appspot.com
potrebbe dover utilizzare risorse archiviate in un bucket Cloud Storage all'indirizzo example.storage.googleapis.com
. Tuttavia, poiché si tratta di due origini diverse dal punto di vista del browser, il browser non consentirà a uno script di example.appspot.com
di recuperare risorse da example.storage.googleapis.com
.
La specifica della condivisione delle risorse tra origini (CORS) è stata sviluppata dal World Wide Web Consortium (W3C) per aggirare questa limitazione.
Cloud Storage supporta questa specifica consentendo di configurare i bucket per supportare CORS. Continuando con l'esempio precedente, puoi configurare il bucket example.storage.googleapis.com
in modo che un browser possa condividere le sue risorse con gli script di example.appspot.com
.
Per ulteriori informazioni sui componenti di configurazione CORS, consulta Impostare CORS per il bucket.
Come funziona CORS
Esistono due tipi di richieste CORS: semplici e con controllo preliminare. È possibile avviare direttamente una richiesta semplice. Una richiesta con controllo preliminare deve inviare una richiesta preliminare "preflight" al server per ottenere l'autorizzazione prima che la richiesta principale possa procedere. Una richiesta viene sottoposta a preflight se si verifica una delle seguenti circostanze:
- Utilizza metodi diversi da
GET
,HEAD
oPOST
. - Utilizza il metodo
POST
con unContent-Type
diverso datext/plain
,application/x-www-form-urlencoded
omultipart/form-data
. - Imposta intestazioni personalizzate. Ad esempio,
X-PINGOTHER
.
Quando un browser effettua una semplice richiesta a Cloud Storage, viene eseguita la seguente procedura:
Il browser aggiunge l'intestazione
Origin
alla richiesta. L'intestazioneOrigin
contiene l'origine della risorsa che vuole condividere le risorse del bucket Cloud Storage, ad esempioOrigin:https://www.example.appspot.com
.Cloud Storage confronta il metodo HTTP della richiesta e il valore dell'intestazione
Origin
con le informazioni su Methods e Origins nella configurazione CORS del bucket di destinazione per verificare se esistono corrispondenze. In questo caso, Cloud Storage include l'intestazioneAccess-Control-Allow-Origin
nella risposta. L'intestazioneAccess-Control-Allow-Origin
contiene il valore dell'intestazioneOrigin
della richiesta iniziale.Il browser riceve la risposta e controlla se il valore
Access-Control-Allow-Origin
corrisponde al dominio specificato nella richiesta originale. Se corrispondono, la richiesta va a buon fine. Se non c'è corrispondenza o se l'intestazioneAccess-Control-Allow-Origin
non è presente nella risposta, la richiesta non va a buon fine.
Una richiesta di preflight esegue prima i seguenti passaggi. Se l'operazione ha esito positivo, viene seguito lo stesso procedimento di una semplice richiesta:
Il browser invia una richiesta
OPTIONS
contenenteRequested Method
eRequested Headers
della richiesta principale.Cloud Storage risponde con i valori dei metodi e delle intestazioni HTTP consentiti dalla risorsa di destinazione. Se uno dei valori del metodo o dell'intestazione nella richiesta di preflight non fa parte dell'insieme di metodi e intestazioni consentiti dalla risorsa di destinazione, la richiesta non va a buon fine e la richiesta principale non viene inviata.
Questa è una descrizione semplificata del CORS. Per una descrizione più completa, leggi la specifica di Fetch.
Supporto CORS di Cloud Storage
Cloud Storage ti consente di impostare una configurazione CORS solo a livello di bucket. Puoi configurare una configurazione CORS per un bucket utilizzando una serie di strumenti. Tuttavia, i diversi endpoint Cloud Storage gestiscono le richieste CORS in modi diversi:
Gli endpoint API JSON consentono sempre le richieste CORS e restituiscono valori predefiniti nelle intestazioni di risposta CORS, indipendentemente dalla configurazione impostata sul bucket.
Gli endpoint dell'API XML consentono solo richieste CORS in base alla configurazione del bucket e restituiscono valori specifici dell'intestazione CORS in risposta a questa configurazione.
L'endpoint di download del browser autenticato
storage.cloud.google.com
non consente le richieste CORS. Tieni presente che la console Google Cloud fornisce questo endpoint per il link dell'URL pubblico di ogni oggetto.
Puoi utilizzare uno dei seguenti URL di richiesta dell'API XML per ottenere da Cloud Storage una risposta contenente le intestazioni CORS:
storage.googleapis.com/BUCKET_NAME
BUCKET_NAME.storage.googleapis.com
Per informazioni sugli URL di richiesta dell'API XML, consulta Endpoint di richiesta.
Componenti di una configurazione CORS
Quando utilizzi l'API XML, i valori impostati nella configurazione CORS del bucket determinano le intestazioni CORS restituite da Cloud Storage in una risposta HTTP. Quando utilizzi l'API JSON, Cloud Storage non valuta la configurazione del tuo bucket e restituisce i valori predefiniti dell'intestazione.
La seguente tabella descrive i campi in una configurazione CORS e il comportamento di risposta delle API XML e JSON. Per scoprire come vengono utilizzati questi campi, consulta Esempi di configurazione CORS.
Campo1 | Descrizione | Comportamento della risposta dell'API XML | Comportamento della risposta dell'API JSON |
---|---|---|---|
origin |
Specifica le origini per cui vuoi consentire la condivisione delle risorse tra origini
con questo bucket Cloud Storage.
Ad esempio, https://origin1.example.com . |
Se l'origine nella richiesta di un browser corrisponde a un'origine nella configurazione CORS,
Cloud Storage restituisce Access-Control-Allow-Origin al browser. Se non c'è corrispondenza, Cloud Storage non include
Access-Control-Allow-Origin nella risposta. Puoi fornire un valore con caratteri jolly che concede l'accesso a tutte le origini:<Origin>*</Origin> . |
Cloud Storage restituisce l'intestazione Access-Control-Allow-Origin
impostata sull'origine della richiesta. |
method |
Specifica i metodi HTTP che vuoi consentire per la condivisione di risorse tra origini con questo bucket Cloud Storage. Il valore viene restituito nell' Poiché |
Cloud Storage supporta i seguenti metodi: Cloud Storage controlla i metodi
inviati dal browser nell'intestazione |
Cloud Storage restituisce l'intestazione Access-Control-Allow-Methods impostata sui seguenti metodi: DELETE ,
GET , HEAD , PATCH , POST ,
PUT .
|
responseHeader |
Specifica le intestazioni da consentire per la condivisione delle risorse tra origini con questo bucket Cloud Storage. Il valore viene restituito nell'intestazione Access-Control-Allow-Headers in risposta alle richieste di preflight andate a buon fine. |
Per le richieste di preflight, Cloud Storage controlla le intestazioni inviate
dal browser nell'intestazione Access-Control-Request-Headers
rispetto alla configurazione CORS del bucket. Se non c'è corrispondenza,
Cloud Storage non restituisce le intestazioni di risposta CORS. |
Cloud Storage restituisce l'intestazione Access-Control-Allow-Headers impostata su valori uguali a quelli specificati dall'intestazione Access-Control-Request-Headers . |
maxAgeSeconds (facoltativo) |
Specifica il numero di secondi per i quali il browser è autorizzato a inviare richieste prima di dover ripetere la richiesta di preflight. Questo valore è noto anche come data e ora di scadenza della cache. Questo valore viene restituito
nell'intestazione Access-Control-Max-Age nelle risposte alle richieste di preflight. Ad esempio, 3600 imposta la data e l'ora di scadenza della cache su 1
ora. |
Cloud Storage restituisce l'intestazione Access-Control-Max-Age
con la data e l'ora di scadenza della cache specificata. Se ometti questo campo,
Cloud Storage restituisce il valore predefinito 3600 . |
Cloud Storage restituisce l'intestazione Access-Control-Max-Age
con il valore predefinito 3600 . |
1 I nomi documentati nella colonna Campo sono specifici dell'API JSON. Quando utilizzi l'API XML per impostare una configurazione CORS, utilizza il formato specifico per XML.
Specificare più origini, metodi o intestazioni
Per scoprire come impostare più origini, metodi o intestazioni in una configurazione CORS, consulta il seguente elenco:
Quando utilizzi l'API JSON, puoi specificare più origini, metodi o intestazioni utilizzando un array separato da virgole. Ad esempio,
"method": ["GET", "PUT"]
.Quando utilizzi l'API XML, puoi specificare più origini, metodi o intestazioni utilizzando elementi separati. Ad esempio:
<Methods> <Method>PUT</Method> <Method>GET</Method> </Methods>
Per consentire l'invio di richieste da qualsiasi origine, imposta l'origine su
*
. Ad esempio,"origin": ["*"]
nell'API JSON o<Origin>*</Origin>
nell'API XML. Sebbene questa origine sia utile per testare le configurazioni, nella maggior parte dei casi è consigliabile limitare le origini delle richieste per impedire l'utilizzo indesiderato delle risorse.
Ulteriori considerazioni
La seguente tabella descrive le considerazioni da tenere presenti quando si effettuano richieste utilizzando le credenziali o le controllo dell'accesso dell'accesso:
Proprietà o intestazione | Descrizione | Comportamento della risposta dell'API XML | Comportamento della risposta dell'API JSON |
---|---|---|---|
Credenziali | Cookie, intestazioni di autorizzazione o certificati client TLS. | Cloud Storage non restituisce mai l'intestazione Access-Control-Allow-Credentials . Le credenziali CORS non sono supportate dall'API XML. |
Per le richieste semplici, se la richiesta CORS viene approvata, l'intestazione Per le richieste di preflight, se |
Intestazioni esposte | Per le richieste preflight, l'intestazione della richiesta Access-Control-Request-Headers
indica quali intestazioni potrebbe includere una futura richiesta CORS.
L'intestazione di risposta Access-Control-Expose-Headers è inclusa
nella risposta del server e indica al client quali intestazioni possono essere
esposte. |
Per le richieste semplici, Access-Control-Expose-Headers elenca i valori delle intestazioni di risposta nella configurazione CORS. |
Per le richieste semplici, Access-Control-Expose-Headers restituisce
i valori specificati in Access-Control-Request-Headers se fanno parte di un elenco di intestazioni HTTP comuni. |
Consentire ai bucket di accedere a risorse esterne
A volte potresti voler consentire agli script ospitati in Cloud Storage di accedere a risorse statiche ospitate su un sito web esterno a Cloud Storage. In questo scenario, il sito web pubblica intestazioni CORS in modo che i contenuti su storage.googleapis.com
possano essere visualizzati.
Come best practice, ti consigliamo di dedicare un bucket specifico per questo accesso ai dati.
Questo approccio impedisce al tuo sito di esporre inavvertitamente risorse statiche a tutto storage.googleapis.com
. Ad esempio, se vuoi dedicare un bucket denominato mybucket
per l'accesso ai dati, devi fare in modo che il sito web invii l'intestazione CORS Access-Control-Allow-Origin: https://mybucket.storage.googleapis.com
anziché Access-Control-Allow-Origin: https://storage.googleapis.com
.
Supporto CORS lato client
La maggior parte dei browser utilizza l'oggetto XMLHttpRequest
per effettuare una richiesta tra domini.
XMLHttpRequest
si occupa di tutto il lavoro di inserimento delle intestazioni giuste e di gestione dell'interazione CORS con il server. Non devi aggiungere nuovo codice per sfruttare il supporto di CORS nei bucket Cloud Storage.
Passaggi successivi
- Scopri come attivare CORS per il tuo bucket.
- Consulta gli esempi di configurazione CORS, incluso un esempio che rimuove la configurazione CORS da un bucket.