Configurazione Esempi di configurazione
La condivisione delle risorse tra origini (CORS) consente alle applicazioni web lato client
di accedere alle risorse di origini diverse. Cloud Storage supporta la specifica CORS, consentendoti di configurare i bucket per condividere le risorse in modo sicuro con script di altre origini. Ad esempio, puoi utilizzare CORS per consentire alla tua applicazione web https://example-app.appspot.com di accedere a una risorsa all'origine https://example-data.storage.googleapis.com.
Per saperne di più sui componenti della configurazione CORS, consulta Imposta CORS bucket.
Come funziona CORS
Utilizza CORS quando vuoi che il tuo sito web recuperi file, immagini o script direttamente da un bucket Cloud Storage utilizzando una richiesta basata sul browser.
Consentire l'accesso tra più domini
Per impostazione predefinita, i browser web applicano una misura di sicurezza chiamata
criterio della stessa origine. Il criterio della stessa origine impedisce a uno script su un sito web
di interagire con risorse su un dominio diverso. Sebbene ciò protegga
gli utenti da siti dannosi, blocca anche le richieste legittime. Ad esempio, se
la tua applicazione web https://example-app.appspot.com tenta di accedere a una
risorsa all'origine https://example-data.storage.googleapis.com, il browser
bloccherà la richiesta per impostazione predefinita perché i domini non corrispondono.
La specifica CORS fornisce ai server un modo per comunicare al browser: "Mi fido di questo dominio specifico, quindi consenti la richiesta."
Cloud Storage consente di impostare una configurazione CORS sul bucket. Se configurato, Cloud Storage invia intestazioni HTTP specifiche al browser (ad esempio Access-Control-Allow-Origin) che autorizzano il browser a condividere le risorse del bucket con la tua applicazione web.
Tipi di richieste
Le richieste CORS funzionano in due modi: semplice e preflight. Una richiesta semplice procede direttamente, mentre una richiesta preflight invia prima una richiesta preliminare per ottenere l'autorizzazione.
Richieste semplici
Quando un browser effettua una semplice richiesta a Cloud Storage, si verifica il seguente processo:
Il browser aggiunge l'intestazione
Originalla richiesta. L'intestazioneOrigincontiene l'origine della risorsa che vuole condividere le risorse del bucket Cloud Storage, ad esempio,Origin:https://www.example-app.appspot.com.Cloud Storage confronta il metodo HTTP della richiesta e il valore dell'intestazione
Origincon le informazioni Methods e Origins nella configurazione CORS del bucket di destinazione per verificare se ci sono corrispondenze. Se presenti, Cloud Storage include l'intestazioneAccess-Control-Allow-Originnella risposta. L'intestazioneAccess-Control-Allow-Origincontiene il valore dell'intestazioneOrigindella richiesta iniziale.Il browser riceve la risposta e verifica se il valore di
Access-Control-Allow-Origincorrisponde al dominio specificato nella richiesta originale. Se corrispondono, la richiesta va a buon fine. Se non corrispondono o se l'intestazioneAccess-Control-Allow-Originnon è presente nella risposta, la richiesta non va a buon fine.
Richieste preflight
Una richiesta viene sottoposta a preflight se si verifica una delle seguenti circostanze:
- Utilizza metodi diversi da
GET,HEADoPOST. - Utilizza il metodo
POSTcon unContent-Typediverso datext/plain,application/x-www-form-urlencodedomultipart/form-data. - Imposta intestazioni personalizzate. Ad esempio,
X-PINGOTHER.
Una richiesta preflight esegue prima i seguenti passaggi. Se l'operazione va a buon fine, segue la stessa procedura di una semplice richiesta:
Il browser invia una richiesta
OPTIONScontenenteRequested MethodeRequested Headersdella richiesta principale.Cloud Storage risponde con i valori dei metodi HTTP e delle intestazioni consentiti dalla risorsa di destinazione. Se uno qualsiasi dei valori di metodo o intestazione nella richiesta di verifica preliminare non è presente nell'insieme di metodi e intestazioni consentiti dalla risorsa di destinazione, la richiesta non va a buon fine e la richiesta principale non viene inviata.
Per una descrizione più completa delle richieste CORS, leggi le specifiche di Fetch.
Supporto CORS di Cloud Storage
Cloud Storage consente di impostare le configurazioni CORS a livello di bucket. Gli endpoint API JSON e API XML gestiscono le richieste CORS e restituiscono intestazioni di risposta in modo diverso. Comprendi questi comportamenti per configurare i bucket in modo efficace:
Gli endpoint API JSON consentono sempre le richieste CORS e restituiscono valori predefiniti nelle intestazioni delle risposte CORS, indipendentemente dalla configurazione impostata nel bucket.
Gli endpoint API XML consentono solo le richieste CORS in base alla configurazione del bucket e restituiscono valori di intestazione CORS specifici in risposta a questa configurazione.
L'endpoint di download del browser autenticato
storage.cloud.google.comnon consente le richieste CORS. Tieni presente che la console Google Cloud fornisce questo endpoint per ogni link all'URL pubblico dell'oggetto.
Puoi utilizzare uno dei seguenti URL di richiesta API XML per ottenere una risposta da Cloud Storage che contenga le intestazioni CORS:
storage.googleapis.com/BUCKET_NAME
BUCKET_NAME.storage.googleapis.com
Per informazioni sugli URL delle richieste API XML, consulta Endpoint delle richieste.
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 bucket e restituisce invece i valori predefiniti delle intestazioni.
La tabella seguente descrive i campi di 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 che vuoi consentire per la condivisione delle risorse tra origini
con questo bucket Cloud Storage.
Ad esempio, https://origin1.example.com. |
Se l'origine in una richiesta del browser corrisponde a un'origine nella configurazione CORS, Cloud Storage restituisce Access-Control-Allow-Origin al browser. Se non viene trovata alcuna corrispondenza, Cloud Storage non include
Access-Control-Allow-Origin nella risposta. Puoi fornire un
valore 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 delle risorse tra origini diverse
con questo bucket Cloud Storage. Il valore viene restituito nell'intestazione
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 che vuoi 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 riuscite. |
Per le richieste preflight, Cloud Storage controlla le intestazioni inviate
dal browser nell'intestazione Access-Control-Request-Headers
rispetto alla configurazione CORS del bucket. Se non viene trovata alcuna corrispondenza,
Cloud Storage non restituisce intestazioni di risposta CORS. |
Cloud Storage restituisce l'intestazione Access-Control-Allow-Headers
impostata in modo che sia uguale ai valori specificati dall'intestazione Access-Control-Request-Headers. |
maxAgeSeconds (facoltativo) |
Specifica il numero di secondi in cui il browser può effettuare richieste prima di dover ripetere la richiesta di verifica preliminare. Questo valore è noto anche come tempo di scadenza della cache. Questo valore viene restituito
nell'intestazione Access-Control-Max-Age nelle risposte alle richieste
preflight. Ad esempio, 3600 imposta il tempo di scadenza della cache su 1
ora. |
Cloud Storage restituisce l'intestazione Access-Control-Max-Age
con il tempo di scadenza della cache specificato. 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'esecuzione di richieste da qualsiasi origine, imposta l'origine sul carattere jolly
*. 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 fare 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 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 della 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 della 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 le intestazioni CORS in modo che
i contenuti su storage.googleapis.com possano essere accessibili.
Come best practice, devi dedicare un bucket specifico a questo accesso ai dati.
Questo approccio impedisce al tuo sito di sovraesporre inavvertitamente le risorse statiche a tutti gli utenti di storage.googleapis.com. Ad esempio, se vuoi dedicare un bucket denominato mybucket per l'accesso ai dati, il sito web deve pubblicare 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.
- Esplora gli esempi di configurazione CORS, incluso un esempio che rimuove la configurazione CORS su un bucket.
- Scopri come risolvere i problemi relativi alle richieste CORS.