Cross-Origin Resource Sharing (CORS)

Die Richtlinie für denselben Ursprung ist eine Sicherheitsrichtlinie, die auf clientseitigen Webanwendungen (z. B. Webbrowsern) erzwungen wird, um Interaktionen zwischen Ressourcen unterschiedlicher Herkunft zu verhindern. Durch diese Sicherheitsmaßnahme wird böswilliges Verhalten unterbunden, sie kann aber auch legitime Interaktionen zwischen Ressourcen bekannter Herkunft stören. Beispiel: Ein Skript auf einer Seite, die in App Engine unter example.appspot.com gehostet wird, muss möglicherweise Ressourcen verwenden, die in einem Cloud Storage-Bucket unter example.storage.googleapis.com gespeichert sind. Aus Browsersicht handelt es sich hierbei um zwei unterschiedliche Herkunftsorte. Das Skript auf example.appspot.com möchte Ressourcen von example.storage.googleapis.com abrufen, der Browser lässt dies aber nicht zu.

Die Spezifikation Cross-Origin Resource Sharing (CORS) wurde vom World Wide Web Consortium (W3C) entwickelt, um diese Einschränkung zu umgehen. Cloud Storage unterstützt diese Spezifikation, indem Buckets so konfiguriert werden können, dass sie CORS unterstützen. Um das Beispiel weiterzuführen, können Sie den example.storage.googleapis.com-Bucket so konfigurieren, dass ein Browser seine Ressourcen mit Skripten aus example.appspot.com teilen kann.

Funktionsweise von CORS

Es gibt zwei Arten von CORS-Anfragen: einfache Anfragen und Preflight-Anfragen. Eine einfache Anfrage kann direkt gestellt werden. Eine Preflight-Anfrage muss eine vorläufige Preflight-Anfrage an den Server senden, um die Berechtigung zu erhalten, bevor die primäre Anfrage fortgesetzt werden kann. Eine Anfrage gilt als Preflight-Anfrage, wenn einer der folgenden Umstände zutrifft:

  • Sie verwendet andere Methoden als GET , HEAD oder POST.
  • Sie verwendet die Methode POST mit einem anderen Content-Type als text/plain, application/x-www-form-urlencoded oder multipart/form-data.
  • Sie legt benutzerdefinierte Header fest.

Der folgende Prozess wird verwendet, wenn ein Browser eine einfache Anfrage an Cloud Storage sendet:

  1. Der Browser fügt der Anfrage den Header Origin hinzu. Der Header Origin enthält den Ursprung der Ressource, welche die Ressourcen der anderen Domain, z. B. Origin:http://www.example.appspot.com, teilen möchte.

  2. Cloud Storage vergleicht die HTTP-Methode der Anfrage und den Wert des Headers Origin mit den Informationen zu Methoden und Origins in der CORS-Konfiguration des Ziel-Buckets, um festzustellen, ob Übereinstimmungen vorhanden sind. Ist dies der Fall, schließt Cloud Storage den Header Access-Control-Allow-Origin in die Antwort ein. Der Header Access-Control-Allow-Origin enthält den Wert des Headers Origin aus der ursprünglichen Anfrage.

  3. Der Browser empfängt die Antwort und überprüft, ob der Wert Access-Control-Allow-Origin mit der in der ursprünglichen Anfrage angegebenen Domain übereinstimmt. Ist dies der Fall, dann ist die Anfrage erfolgreich. Wenn sie nicht übereinstimmen oder wenn der Header Access-Control-Allow-Origin in der Antwort nicht vorhanden ist, schlägt die Anfrage fehl.

Eine Preflight-Anfrage führt zuerst die folgenden Schritte aus. Wenn dieses Vorgehen erfolgreich ist, erfolgt der gleiche Prozess wie bei einer einfachen Anfrage:

  1. Der Browser sendet die Anfrage OPTIONS, in der die Requested Method und Requested Headers der primären Anfrage enthalten sind.

  2. Der Server antwortet mit den Werten der HTTP-Methoden und -Header, die von der Zielressource zugelassen werden. Wenn einer der Methoden- oder Headerwerte in der Preflight-Anfrage nicht in dem von der Zielressource zulässigen Satz von Methoden und Headern enthalten ist, schlägt die Anfrage fehl und die primäre Anfrage wird nicht gesendet.

Dies ist eine sehr vereinfachte Beschreibung von CORS. Eine ausführlichere Beschreibung finden Sie in der Spezifikation Cross-Origin Resource Sharing.

CORS-Unterstützung in Cloud Storage

In Cloud Storage lässt sich die CORS-Konfiguration nur auf Bucket-Ebene vornehmen. Sie können die CORS-Konfiguration für einen Bucket mithilfe des gsutil-Befehlszeilentools, der XML API oder der JSON API festlegen.

Weitere Informationen zur CORS-Konfiguration für einen Bucket finden Sie unter Cross-Origin Resource Sharing (CORS) konfigurieren. Weitere Informationen zu CORS-Konfigurationselementen finden Sie unter Bucket-CORS festlegen.

Sie können eine der folgenden XML API-Anfrage-URLs verwenden, um eine Antwort von Cloud Storage abzurufen, welche die CORS-Header enthält:

storage.googleapis.com/[BUCKET_NAME]
[BUCKET_NAME].storage.googleapis.com

Weitere Informationen zu XML API-Anfrage-URLs finden Sie unter Anfrageendpunkte.

Clientseitiger CORS Support

In den meisten Browsern wird für domainübergreifende Anfragen das Objekt XMLHttpRequest verwendet. XMLHttpRequest übernimmt das Einfügen der richtigen Header und steuert die Verarbeitung der CORS-Interaktion auf dem Server. Sie müssen keinen neuen Code hinzufügen, um die CORS-Unterstützung für Cloud Storage-Buckets zu nutzen.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...