Configurazione Esempi di configurazione
Il criterio della stessa origine è un criterio di sicurezza applicato in modo forzato
applicazioni web lato client (come i browser web) per impedire interazioni tra
da origini diverse. Sebbene sia utile per prevenire comportamenti dannosi,
Questa misura di sicurezza impedisce anche interazioni legittime
diverse origini dati. Ad esempio, uno script su una pagina ospitata
example.appspot.com
potrebbe dover utilizzare risorse archiviate in
Bucket Cloud Storage in example.storage.googleapis.com
. Tuttavia, poiché
due origini diverse dal punto di vista del browser, del browser
non consentirà a uno script da example.appspot.com
di recuperare risorse da
example.storage.googleapis.com
.
La specifica Condivisione delle risorse tra origini (CORS) è stata sviluppata da
il World Wide Web Consortium (W3C) per aggirare questa limitazione.
Cloud Storage supporta questa specifica consentendoti di configurare
i tuoi bucket per supportare CORS. Continuando con l'esempio precedente, puoi configurare
il bucket example.storage.googleapis.com
in modo che un browser possa condividere
con script di example.appspot.com
.
Per ulteriori informazioni sui componenti di configurazione CORS, consulta Imposta il bucket CORS.
Come funziona CORS
Esistono due tipi di richieste CORS: semplici e con preflight. R semplice richiesta può essere avviata direttamente. R richiesta preflight deve inviare un messaggio "preflight" preliminare al server di ottenere l'autorizzazione prima di procedere con la richiesta principale. Viene eseguita una richiesta in fase preliminare se si verifica una delle seguenti condizioni:
- Utilizza metodi diversi da
GET
,HEAD
oPOST
. - Utilizza il metodo
POST
con un valoreContent-Type
diverso datext/plain
,application/x-www-form-urlencoded
omultipart/form-data
. - Imposta intestazioni personalizzate. Ad esempio,
X-PINGOTHER
.
Il seguente processo si verifica quando un browser invia una semplice richiesta a Cloud Storage:
Il browser aggiunge l'intestazione
Origin
alla richiesta. IntestazioneOrigin
contiene l'origine della risorsa che cerca di condividere di risorse del bucket Cloud Storage, ad esempioOrigin:https://www.example.appspot.com
.Cloud Storage confronta il metodo HTTP della richiesta con il valore dell'intestazione
Origin
alle informazioni Methods e Origins nella configurazione CORS del bucket di destinazione per vedere se ci sono corrispondenze. In caso affermativo, Cloud Storage include l'intestazioneAccess-Control-Allow-Origin
in la sua risposta. L'intestazioneAccess-Control-Allow-Origin
contiene il valore l'intestazioneOrigin
della richiesta iniziale.Il browser riceve la risposta e verifica se Il valore
Access-Control-Allow-Origin
corrisponde al dominio specificato in richiesta originale. Se corrispondono, la richiesta ha esito positivo. In caso contrario o se l'intestazioneAccess-Control-Allow-Origin
è non presente nella risposta, la richiesta non va a buon fine.
Una richiesta preflight esegue prima i passaggi seguenti. Se l'operazione riesce, segue lo stesso processo di una semplice richiesta:
Il browser invia una richiesta
OPTIONS
contenente iRequested Method
eRequested Headers
della richiesta principale.Cloud Storage risponde con i valori dei metodi e delle intestazioni HTTP consentito dalla risorsa target. Se uno qualsiasi dei valori del metodo o dell'intestazione le richieste preflight non rientrano nell'insieme di metodi e intestazioni consentiti risorsa target, la richiesta non va a buon fine e la richiesta principale inviate.
Questa è una descrizione semplificata di CORS. Per una descrizione più completa, leggi le specifiche di Recupero.
Supporto CORS per Cloud Storage
Cloud Storage consente di impostare una configurazione CORS a livello di bucket . Puoi impostare una configurazione CORS per un bucket utilizzando una serie di strumenti; tuttavia, endpoint di Cloud Storage diversi gestiscono CORS richieste in vari modi:
Gli endpoint API JSON consentono sempre le richieste CORS e restituiscono valori predefiniti nei Intestazioni delle risposte CORS, indipendentemente dalla configurazione impostata sul bucket.
Gli endpoint API XML consentono solo richieste CORS in base alla configurazione sul del bucket e restituiscono valori di intestazione CORS specifici in risposta a tale configurazione.
L'endpoint di download del browser autenticato
storage.cloud.google.com
non consentire le richieste CORS. Tieni presente che la console Google Cloud fornisce questo per il link dell'URL pubblico di ciascun oggetto.
Per ottenere una risposta, puoi utilizzare uno dei seguenti URL di richiesta API XML da Cloud Storage che contiene le intestazioni CORS:
storage.googleapis.com/BUCKET_NAME
BUCKET_NAME.storage.googleapis.com
Per informazioni sugli URL delle richieste 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 determinare le intestazioni CORS restituite da Cloud Storage in una risposta HTTP. Quando utilizzi l'API JSON, Cloud Storage non valuta configurazione e restituisce valori di intestazione predefiniti.
Nella tabella seguente sono descritti i campi di una configurazione CORS e il comportamento della risposta delle API XML e JSON. Per scoprire come vengono utilizzati questi campi, vedi gli 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 nel tuo sistema CORS
configurazione,
Cloud Storage restituisce Access-Control-Allow-Origin al
del browser. Se non c'è corrispondenza, Cloud Storage non include
Access-Control-Allow-Origin nella risposta. Puoi fornire un
valore del carattere jolly che concede l'accesso a tutte le origini:
<Origin>*</Origin> . |
Cloud Storage restituisce Access-Control-Allow-Origin
impostata sull'origine della richiesta. |
method |
Specifica i metodi HTTP che vuoi consentire per la risorsa multiorigine
condivisione
con questo bucket Cloud Storage. Il valore viene restituito nel
Intestazione Poiché |
Cloud Storage supporta i seguenti metodi: Cloud Storage controlla i metodi
inviati dal browser nell'intestazione |
Cloud Storage restituisce Access-Control-Allow-Methods
intestazione impostata sui seguenti metodi: DELETE ,
GET , HEAD , PATCH , POST ,
PUT .
|
responseHeader |
Specifica quali intestazioni vuoi consentire
condivisione delle risorse tra origini con questo bucket Cloud Storage. La
viene restituito nell'intestazione Access-Control-Allow-Headers
in risposta alle richieste 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. In caso contrario,
Cloud Storage non restituisce intestazioni delle risposte CORS. |
Cloud Storage restituisce l'intestazione Access-Control-Allow-Headers
impostato uguale ai valori specificati dall'intestazione Access-Control-Request-Headers . |
maxAgeSeconds (facoltativo) |
Specifica il numero di secondi in cui
browser sia autorizzato a effettuare richieste prima che ripeta il preflight
richiesta. Questa è anche nota come data di scadenza della cache. Questo valore viene restituito
nell'intestazione Access-Control-Max-Age nelle risposte al preflight
richieste. Ad esempio, 3600 imposta la scadenza della cache su 1
ora. |
Cloud Storage restituisce Access-Control-Max-Age
con la data di scadenza specificata per la cache. Se ometti questo campo,
Cloud Storage restituisce il valore predefinito di 3600 . |
Cloud Storage restituisce 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 metodo Formato specifico per XML.
Specificare più origini, metodi o intestazioni
Per scoprire come impostare più origini, metodi o intestazioni in un progetto CORS di rete, consulta l'elenco seguente:
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 delle richieste da qualsiasi origine, imposta l'origine su
*
. Ad esempio,"origin": ["*"]
nell'API JSON o<Origin>*</Origin>
nella l'API XML. Sebbene questa origine sia utile per testare le configurazioni, nella maggior parte ti consigliamo di limitare le origini delle richieste per impedire l'uso indesiderato le tue risorse.
Ulteriori considerazioni
La tabella seguente descrive le considerazioni da tenere presenti quando si effettuano richieste utilizzando credenziali o intestazioni di controllo 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'errore Access-Control-Allow-Credentials
intestazione. 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, Access-Control-Request-Headers
l'intestazione request indica quali intestazioni potrebbero 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
esposte. |
Per le richieste semplici, Access-Control-Expose-Headers elenca
i valori delle intestazioni delle risposte 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. |
Autorizzazione ai bucket di accedere alle 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
di archiviazione ideale in Cloud Storage. In questo scenario, il sito web pubblica intestazioni CORS in modo che
per i contenuti su storage.googleapis.com
sia consentito l'accesso.
Come best practice, devi dedicare un bucket specifico per questo accesso ai dati.
Questo approccio impedisce al tuo sito di sovraesporre inavvertitamente elementi statici
risorse per tutti i seguenti elementi: storage.googleapis.com
. Ad esempio, se vuoi
dedica un bucket denominato mybucket
per l'accesso ai dati, dovresti avere il sito web
gestire l'intestazione CORS
Access-Control-Allow-Origin: https://mybucket.storage.googleapis.com
invece
di 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 inserire le intestazioni corrette e
per la gestione dell'interazione CORS con il server. Non è necessario aggiungere nuovi elementi
per sfruttare il supporto CORS sui bucket Cloud Storage.
Passaggi successivi
- Scopri come abilitare CORS per il tuo bucket.
- Esplora gli esempi di configurazione CORS, tra cui un esempio che rimuove la configurazione CORS su un bucket.