Cross-Origin Resource Sharing (CORS) ermöglicht Interaktionen zwischen Ressourcen aus unterschiedlichen Quellen. Normalerweise wird dies verhindert, um böswilliges Verhalten zu unterbinden. Unter diesem Thema erfahren Sie, wie Sie CORS für einen Cloud Storage-Bucket konfigurieren.
CORS für einen Bucket konfigurieren
Die CORS-Konfiguration für einen Bucket erfolgt anhand der Angabe von Informationen wie HTTP-Methoden und Quelldomains. Diese identifizieren die Arten von Anfragen, die akzeptiert werden. Sie können das gsutil-Befehlszeilentool, die XML API, die JSON API oder die Clientbibliotheken für Cloud Storage verwenden, um die CORS-Konfiguration für einen Bucket festzulegen.
Im folgenden Beispiel sehen Sie, wie Sie CORS für Ihren Bucket konfigurieren:
gsutil
Erstellen Sie eine JSON-Datei, die Folgendes enthält:
[ { "origin": ["ORIGIN"], "method": ["METHOD"], "responseHeader": ["HEADER"], "maxAgeSeconds": MAX-AGE } ]
Dabei gilt:
ORIGIN
ist eine für Cross-Origin Resource Sharing mit diesem Bucket zugelassene Quelle. Beispiel:https://example.appspot.com
METHOD
ist eine für Cross-Origin Resource Sharing mit diesem Bucket zugelassene HTTP-Methode. Beispiel:GET
oderPUT
HEADER
ist ein für Cross-Origin Resource Sharing mit diesem Bucket zugelassener Header. Beispiel:Content-Type
MAX-AGE
ist die Angabe, wie viele Sekunden lang der Browser Anfragen senden darf, bevor die Preflight-Anfrage wiederholt werden muss. Beispiel:3600
Weitere Informationen finden Sie unter Elemente einer CORS-Konfiguration.
Verwenden Sie den Befehl
gsutil cors
, um CORS in einem Bucket zu konfigurieren:gsutil cors set JSON_FILE_NAME.json gs://BUCKET_NAME
Dabei gilt:
JSON_FILE_NAME
ist der Pfad zur JSON-Datei, die Sie in Schritt 1 erstellt haben.BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
Codebeispiele
C++
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.
Go
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Go API.
Java
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.
Node.js
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.
Python
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.
Ruby
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Ruby API.
C#
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.
Sie können CORS derzeit nicht mit der C#-Clientbibliothek konfigurieren.
PHP
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage PHP API.
Informationen dazu, wie Sie mithilfe von PHP eine CORS-Konfiguration für einen Bucket festlegen, finden Sie in der Google\Cloud\Storage\Bucket-Referenzdokumentation.
REST APIs
JSON API
- Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
Erstellen Sie eine JSON-Datei, die Folgendes enthält:
{ "cors": [ { "origin": [ "ORIGIN" ], "method": [ "METHOD" ], "responseHeader": [ "HEADER" ], "maxAgeSeconds": MAX-AGE } ] }
Dabei gilt:
ORIGIN
ist eine für Cross-Origin Resource Sharing mit diesem Bucket zugelassene Quelle. Beispiel:https://example.appspot.com
METHOD
ist eine für Cross-Origin Resource Sharing mit diesem Bucket zugelassene HTTP-Methode. Beispiel:GET
oderPUT
.HEADER
ist ein für Cross-Origin Resource Sharing mit diesem Bucket zugelassener Header. Beispiel:Content-Type
MAX-AGE
ist die Angabe, wie viele Sekunden lang der Browser Anfragen senden darf, bevor die Preflight-Anfrage wiederholt werden muss. Beispiel:3600
Weitere Informationen finden Sie unter Elemente einer CORS-Konfiguration.
Verwenden Sie
cURL
, um die JSON API mit einerPATCH
-Bucket-Anfrage aufzurufen:curl --request PATCH \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME' \ --header 'Authorization: Bearer OAUTH2_TOKEN' \ --header 'Content-Type: application/json' \ --data-binary @JSON_FILE_NAME.json
Dabei gilt:
BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
OAUTH2_TOKEN
ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.JSON_FILE_NAME
ist der Pfad zu der Datei, die Sie in Schritt 2 erstellt haben.
XML API
- Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
Erstellen Sie eine XML-Datei, die Folgendes enthält:
<?xml version="1.0" encoding="UTF-8"?> <CorsConfig> <Cors> <Origins> <Origin>ORIGIN</Origin> </Origins> <Methods> <Method>METHOD</Method> </Methods> <ResponseHeaders> <ResponseHeader>HEADER</ResponseHeader> </ResponseHeaders> <MaxAgeSec>MAX-AGE</MaxAgeSec> </Cors> </CorsConfig>
Dabei gilt:
ORIGIN
ist eine für Cross-Origin Resource Sharing mit diesem Bucket zugelassene Quelle. Beispiel:https://example.appspot.com
METHOD
ist eine für Cross-Origin Resource Sharing mit diesem Bucket zugelassene HTTP-Methode. Beispiel:GET
oderPUT
.HEADER
ist ein für Cross-Origin Resource Sharing mit diesem Bucket zugelassener Header. Beispiel:Content-Type
MAX-AGE
ist die Angabe, wie viele Sekunden lang der Browser Anfragen senden darf, bevor die Preflight-Anfrage wiederholt werden muss. Beispiel:3600
Weitere Informationen finden Sie unter Elemente einer CORS-Konfiguration.
Verwenden Sie
cURL
, um die XML API mit einerSet Bucket CORS
-Anfrage aufzurufen:curl -X PUT --data-binary @XML_FILE_NAME.xml \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
Dabei gilt:
BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
OAUTH2_TOKEN
ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.PROJECT_ID
ist die ID des mit dem Bucket verknüpften Projekts. Beispiel:my-project
XML_FILE_NAME
ist der Pfad zu der Datei, die Sie in Schritt 2 erstellt haben.
CORS-Konfiguration für einen Bucket ansehen
So rufen Sie die CORS-Konfiguration für einen Bucket auf:
gsutil
Verwenden Sie den Befehl gsutil cors
, um die CORS-Konfiguration eines Buckets abzurufen:
gsutil cors get gs://BUCKET_NAME
Dabei ist BUCKET_NAME
der Name des Buckets. Beispiel: my-bucket
Codebeispiele
Wenn Sie sich die CORS-Konfiguration für einen Bucket mithilfe der Clientbibliotheken ansehen möchten, folgen Sie der Anleitung zum Aufrufen der Metadaten eines Buckets und suchen Sie in der Antwort nach dem CORS-Feld:
C++
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.
C#
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.
Go
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Go API.
Java
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.
Node.js
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.
PHP
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage PHP API.
Python
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.
Ruby
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Ruby API.
REST APIs
JSON API
- Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
Verwenden Sie
cURL
, um die JSON API mit einerGET
-Bucket-Anfrage aufzurufen:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors"
Dabei gilt:
OAUTH2_TOKEN
ist der Name des Zugriffstokens, das Sie in Schritt 1 generiert haben.BUCKET_NAME
ist der Name des entsprechenden Buckets. Beispiel:my-bucket
.
XML API
- Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
Verwenden Sie
cURL
, um die XML API mit einerGET
-Bucket-Anfrage aufzurufen:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
Dabei gilt:
OAUTH2_TOKEN
ist der Name des Zugriffstokens, das Sie in Schritt 1 generiert haben.BUCKET_NAME
ist der Name des entsprechenden Buckets. Beispiel:my-bucket
CORS aus einem Bucket entfernen
So entfernen Sie die CORS-Konfiguration aus einem Bucket:
gsutil
Erstellen Sie eine JSON-Datei, die Folgendes enthält:
[]
Verwenden Sie den Befehl
gsutil cors
, um CORS in einem Bucket zu konfigurieren:gsutil cors set JSON_FILE_NAME.json gs://BUCKET_NAME
Dabei gilt:
JSON_FILE_NAME
ist der Pfad zur JSON-Datei, die Sie in Schritt 1 erstellt haben.BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
Codebeispiele
C++
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.
Go
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Go API.
Java
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.
Node.js
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.
Python
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.
Ruby
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Ruby API.
C#
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.
Sie können derzeit nicht mit CORS über die C#-Clientbibliothek arbeiten.
PHP
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage PHP API.
In der Referenzdokumentation unter Google\Cloud\Storage\Bucket erfahren Sie, wie Sie mit PHP CORS-Konfigurationen für einen Bucket verwenden können.
REST APIs
JSON API
- Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
Erstellen Sie eine JSON-Datei, die Folgendes enthält:
{ "cors": [] }
Verwenden Sie
cURL
, um die JSON API mit einerPATCH
-Bucket-Anfrage aufzurufen:curl --request PATCH \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME' \ --header 'Authorization: Bearer OAUTH2_TOKEN' \ --header 'Content-Type: application/json' \ --data-binary @JSON_FILE_NAME.json
Dabei gilt:
BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
OAUTH2_TOKEN
ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.JSON_FILE_NAME
ist der Pfad zu der Datei, die Sie in Schritt 2 erstellt haben.
XML API
- Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
Erstellen Sie eine XML-Datei, die Folgendes enthält:
<CorsConfig></CorsConfig>
Verwenden Sie
cURL
, um die XML API mit einerSet Bucket CORS
-Anfrage aufzurufen:curl -X PUT --data-binary @XML_FILE_NAME.xml \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
Dabei gilt:
BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
OAUTH2_TOKEN
ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.PROJECT_ID
ist die ID des mit dem Bucket verknüpften Projekts. Beispiel:my-project
XML_FILE_NAME
ist der Pfad zu der Datei, die Sie in Schritt 2 erstellt haben.
Fehler bei CORS-Anfragen beheben
Wenn beim Zugriff auf Cloud Storage-Buckets von einer anderen Quelle aus ein unerwartetes Verhalten auftritt, führen Sie die folgenden Schritte aus:
Verwenden Sie
gsutil cors get
im Ziel-Bucket, um die zugehörige CORS-Konfiguration abzurufen. Wenn Sie mehrere CORS-Konfigurationseinträge haben, achten Sie bei den folgenden Schritten darauf, dass die Anfragewerte Werten im selben CORS-Konfigurationseintrag zugeordnet sind.Stellen Sie sicher, dass Sie keine Anfrage an den Endpunkt
storage.cloud.google.com
stellen, da dieser keine CORS-Anfragen zulässt. Weitere Informationen zu den unterstützten Endpunkten für CORS finden Sie unter CORS-Unterstützung in Cloud Storage.Überprüfen Sie mit dem Tool Ihrer Wahl eine Anfrage und eine Antwort. In einem Chrome-Browser können Sie mit den Standardentwicklertools folgende Informationen ansehen:
- Klicken Sie in der Symbolleiste des Browsers auf das Chrome-Menü (
).
- Wählen Sie Weitere Tools > Entwicklertools aus.
- Klicken Sie auf den Tab Netzwerk.
- Senden Sie die Anfrage von Ihrer Anwendung oder Befehlszeile aus.
- Suchen Sie die Anfrage im Bereich mit der Netzwerkaktivität.
- Klicken Sie in der Spalte Name auf die Anfrage.
- Im Tab Header werden die Antwortheader angezeigt. Unter Antwort sehen Sie den Inhalt der Antwort.
Wenn Sie keine Anfrage und keine Antwort sehen, ist im Browsercache wahrscheinlich noch ein früherer fehlgeschlagener Preflight-Anfrageversuch gespeichert. Wenn Sie den Browsercache löschen, sollte auch der Preflight-Cache geleert werden. Ist dies nicht der Fall, legen Sie für
MaxAgeSec
in Ihrer CORS-Konfiguration einen niedrigeren Wert fest. Wenn Sie keinen Wert angeben, gilt als Standardwert 1.800 (30 Minuten). Warten Sie die Dauer des vorherigen Werts fürMaxAgeSec
ab und wiederholen Sie die Anfrage. Dadurch wird eine neue Preflight-Anfrage ausgeführt. Diese ruft die neue CORS-Konfiguration ab und löscht die Cache-Einträge. Erhöhen Sie den Wert fürMaxAgeSec
nach Beheben des Fehlers wieder, um den Preflight-Traffic zum Bucket zu reduzieren.- Klicken Sie in der Symbolleiste des Browsers auf das Chrome-Menü (
Prüfen Sie, ob die Anfrage den Header
Origin
enthält und der Headerwert mindestens einem der Werte fürOrigins
in der CORS-Konfiguration des Buckets entspricht. Das Schema, der Host und der Port der Werte müssen exakt übereinstimmen. Hier ein paar Beispiele für zulässige Übereinstimmungen:http://origin.example.com
entsprichthttp://origin.example.com:80
, weil 80 der standardmäßige HTTP-Port ist, stimmt aber nicht mithttps://origin.example.com
,http://origin.example.com:8080
,http://origin.example.com:5151
oderhttp://sub.origin.example.com
überein.https://example.com:443
entsprichthttps://example.com
, aber nichthttp://example.com
oderhttp://example.com:443
.http://localhost:8080
entspricht nur genauhttp://localhost:8080
, aber nichthttp://localhost:5555
oderhttp://localhost.example.com:8080
.
Prüfen Sie, ob die HTTP-Methode der Anfrage (bei einer einfachen Anfrage) oder die in
Access-Control-Request-Method
angegebene Methode (bei einer Preflight-Anfrage) mindestens einem der Werte fürMethods
in der CORS-Konfiguration des Buckets entspricht.Prüfen Sie bei einer Preflight-Anfrage, ob diese einen oder mehrere Header der Form
Access-Control-Request-Header
enthält. Achten Sie in diesem Fall darauf, dass jeder Wert fürAccess-Control-Request-Header
einem Wert fürResponseHeader
in der CORS-Konfiguration des Buckets entspricht. Alle imAccess-Control-Request-Header
enthaltenen Header müssen in der CORS-Konfiguration der Preflight-Anfrage enthalten sein, damit diese ausgeführt werden kann und CORS-Header in die Antwort aufgenommen werden.
Nächste Schritte
- Weitere Informationen zu Cross-Origin Resource Sharing (CORS).