Cross-Origin Resource Sharing (CORS) ermöglicht Interaktionen zwischen Ressourcen aus unterschiedlichen Quellen. Normalerweise wird dies verhindert, um böswilliges Verhalten zu unterbinden. In diesem Abschnitt erfahren Sie, wie Sie eine CORS-Konfiguration für einen Cloud Storage-Bucket festlegen und die CORS-Konfiguration für einen Bucket aufrufen. Unter Konfigurationsbeispiele für CORS finden Sie Beispiele für CORS-Konfigurationen, einschließlich der Konfiguration, mit der alle vorhandenen Konfigurationen in Ihrem Bucket deaktiviert werden.
CORS-Konfiguration für einen Bucket festlegen
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 der Bucket akzeptieren kann.
Führen Sie die folgenden Schritte aus, um eine CORS-Konfiguration für den Bucket festzulegen:
Console
Sie können CORS nicht über die Google Cloud Console verwalten. Verwenden Sie stattdessen die gcloud CLI.
Befehlszeile
gcloud
Erstellen Sie eine JSON-Datei mit der CORS-Konfiguration, die Sie anwenden möchten. In den Konfigurationsbeispielen finden Sie JSON-Beispieldateien.
Führen Sie den Befehl
gcloud storage buckets update
mit dem Flag--cors-file
aus.gcloud storage buckets update gs://BUCKET_NAME --cors-file=CORS_CONFIG_FILE
Wobei:
BUCKET_NAME
ist der Name des entsprechenden Buckets. Beispiel:my-bucket
.CORS_CONFIG_FILE
ist der Pfad zur JSON-Datei, die Sie in Schritt 1 erstellt haben.
gsutil
Erstellen Sie eine JSON-Datei mit der CORS-Konfiguration, die Sie anwenden möchten. In den Konfigurationsbeispielen finden Sie JSON-Beispieldateien.
Verwenden Sie den Befehl
gsutil cors
, um die Konfiguration auf einen Bucket anzuwenden:gsutil cors set CORS_CONFIG_FILE gs://BUCKET_NAME
Wobei:
CORS_CONFIG_FILE
ist der Pfad zur JSON-Datei, die Sie in Schritt 1 erstellt haben.BUCKET_NAME
ist der Name des entsprechenden Buckets. Beispiel:my-bucket
.
Clientbibliotheken
C++
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
C#
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
Go
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Go API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
Java
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
Node.js
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
PHP
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage PHP API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
Python
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
Ruby
Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Ruby API.
Im folgenden Beispiel wird eine CORS-Konfiguration für einen Bucket festgelegt:
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. Eine Anleitung finden Sie unter API-Authentifizierung.
Erstellen Sie eine JSON-Datei mit der CORS-Konfiguration, die Sie anwenden möchten. In den Konfigurationsbeispielen finden Sie JSON-Beispieldateien.
Verwenden Sie
cURL
, um die JSON API mit einerPATCH
-Bucket-Anfrage aufzurufen:curl --request PATCH \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors' \ --header 'Authorization: Bearer OAUTH2_TOKEN' \ --header 'Content-Type: application/json' \ --data-binary @CORS_CONFIG_FILE
Wobei:
BUCKET_NAME
ist der Name des Buckets. Beispiel:my-bucket
OAUTH2_TOKEN
ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.CORS_CONFIG_FILE
ist der Pfad zur JSON-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. Eine Anleitung finden Sie unter API-Authentifizierung.
Erstellen Sie eine XML-Datei mit der CORS-Konfiguration, die Sie anwenden möchten. In den Konfigurationsbeispielen finden Sie XML-Beispieldateien.
Verwenden Sie
cURL
, um die XML API mit einerSet Bucket CORS
-Anfrage aufzurufen:curl -X PUT --data-binary @CORS_CONFIG_FILE \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
Wobei:
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
.CORS_CONFIG_FILE
ist der Pfad zu der XML-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:
Console
Sie können CORS nicht über die Google Cloud Console verwalten. Verwenden Sie stattdessen die gcloud CLI.
Befehlszeile
gcloud
Führen Sie den Befehl gcloud storage buckets describe
mit dem Flag --format
aus.
gcloud storage buckets describe gs://BUCKET_NAME --format="default(cors)"
Dabei ist BUCKET_NAME
der Name des Buckets, dessen CORS-Konfiguration Sie aufrufen möchten. Beispiel: my-bucket
.
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, dessen CORS-Konfiguration Sie aufrufen möchten. Beispiel: my-bucket
.
Clientbibliotheken
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. Eine Anleitung finden Sie unter API-Authentifizierung.
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"
Wobei:
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. Eine Anleitung finden Sie unter API-Authentifizierung.
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"
Wobei:
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
.
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:
Prüfen Sie die CORS-Konfiguration des Ziel-Buckets. Wenn Sie mehrere CORS-Konfigurationseinträge haben, achten Sie darauf, dass die für die Fehlerbehebung verwendeten Anfragewerte Werten in einem einzelnen 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
- CORS-Konfigurationsbeispiele ansehen, einschließlich eines Beispiels, bei dem die CORS-Konfiguration für einen Bucket entfernt wird.
- Weitere Informationen zu CORS.