View a markdown version of this page

Wie CloudFront verarbeitet Teilanfragen für ein Objekt (Bereichs-GETs) - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Wie CloudFront verarbeitet Teilanfragen für ein Objekt (Bereichs-GETs)

Bei großen Objekten kann der Viewer (Webbrowser oder anderer Client) mehrere GET-Anforderungen stellen und verwendet den Range-Anforderungs-Header, um das Objekt in kleineren Teilen herunterzuladen. Diese Anfragen für Bereiche von Bytes, manchmal auch als Range GET-Anfragen bezeichnet, steigern die Effizienz von Teil-Downloads und die Wiederherstellung nach teilweise fehlgeschlagenen Übertragungen.

Wenn es eine Range GET Anfrage CloudFront erhält, überprüft es den Cache an dem Edge-Standort, an dem die Anforderung empfangen wurde. Wenn der Cache an dieser Edge-Position bereits das gesamte Objekt oder den angeforderten Teil des Objekts enthält, wird CloudFront sofort der angeforderte Bereich aus dem Cache bereitgestellt.

Wenn der Cache den angeforderten Bereich nicht enthält, CloudFront leitet die Anfrage an den Ursprung weiter. (Zur Leistungsoptimierung CloudFront kann ein größerer Bereich angefordert werden, als der Client in der angefordert hatRange GET.) Der nächste Schritt hängt davon ab, ob der Ursprung Range GET-Anfragen unterstützt:

  • Wenn der Ursprung Range GET Anfragen unterstützt — Er gibt den angeforderten Bereich zurück. CloudFront stellt den angeforderten Bereich bereit und speichert ihn auch für zukünftige Anfragen im Cache. (Amazon S3 unterstützt Range GET-Anforderungen, ebenso wie viele HTTP-Server.)

  • Wenn der Ursprung keine Range GET Anfragen unterstützt, wird das gesamte Objekt zurückgegeben. CloudFront bedient die aktuelle Anfrage, indem das gesamte Objekt gesendet und gleichzeitig für zukünftige Anfragen zwischengespeichert wird. Nachdem CloudFront das gesamte Objekt in einem Edge-Cache zwischengespeichert wurde, reagiert es auf neue Range GET Anfragen, indem es den angeforderten Bereich bereitstellt.

In beiden Fällen CloudFront beginnt die Bereitstellung des angeforderten Bereichs oder Objekts an den Endbenutzer, sobald das erste Byte vom Ursprung eintrifft.

Anmerkung

Wenn der Betrachter eine Range GET Anfrage stellt und der Ursprung CloudFront zurückkehrtTransfer-Encoding: chunked, wird das gesamte Objekt an den Betrachter zurückgegeben, und nicht der angeforderte Bereich.

CloudFront folgt im Allgemeinen der RFC-Spezifikation für den Range Header. Wenn Ihre Range-Header die folgenden Anforderungen jedoch nicht erfüllen, gibt CloudFront HTTP-Statuscode 200 mit dem vollständigen Objekt anstelle von Statuscode 206 mit den angefragten Bereichen zurück:

  • Die Bereiche müssen in aufsteigender Reihenfolge aufgeführt sein. Beispielweise ist 100-200,300-400 gültig, 300-400,100-200 hingegen nicht.

  • Die Bereiche dürfen sich nicht überschneiden. Beispielsweise ist 100-200,150-250 nicht gültig.

  • Alle Bereichsspezifikationen müssen gültig sein. Beispielsweise können Sie keinen negativen Wert als Teil eines Bereichs angeben.

Weitere Informationen zum Range-Anforderungs-Header finden Sie im Abschnitt zu Bereichsanforderungen in RFC 7233 oder im Abschnitt zum Bereich in den MDN-Webdokumenten.

Verwenden von Bereichsanforderungen zum Zwischenspeichern großer Objekte

Wenn das Caching aktiviert ist, wird CloudFront kein Objekt abgerufen oder zwischengespeichert, das größer als 50 GB ist. Wenn ein Ursprung angibt, dass das Objekt größer als diese Größe ist (im Content-Length Antwort-Header), CloudFront wird die Verbindung zum Ursprung geschlossen und eine Fehlermeldung wird an den Viewer zurückgegeben. (Bei deaktiviertem Caching CloudFront kann ein Objekt, das größer als diese Größe ist, vom Ursprung abgerufen und an den Viewer weitergegeben werden. Das Objekt CloudFront wird jedoch nicht zwischengespeichert.)

Bei Bereichsanforderungen können CloudFront Sie jedoch ein Objekt zwischenspeichern, das größer als die maximal zwischenspeicherbare Dateigröße ist.

Beispiel Beispiel
  1. Gehen wir von einem Ursprung mit einem Objekt mit 100 GB aus. Wenn das Caching aktiviert ist, CloudFront wird ein Objekt dieser Größe nicht abgerufen oder zwischengespeichert. Der Viewer kann jedoch mehrere Bereichsanforderungen senden, um dieses Objekt in Teilen abzurufen, wobei die Teile jeweils kleiner als 50 GB sind.

  2. Der Viewer kann das Objekt in 20-GB-Teilen anfordern, indem er eine Anforderung mit dem Header Range: bytes=0-21474836480 sendet, um den ersten Teil abzurufen, eine weitere Anforderung mit dem Header Range: bytes=21474836481-42949672960, um den nächsten Teil abzurufen und so weiter.

  3. Nachdem der Viewer alle Teile empfangen hat, kann er sie kombinieren, um das ursprüngliche Objekt mit 100 GB zu erstellen.

  4. In diesem Fall CloudFront speichert jedes der 20-GB-Teile des Objekts im Cache und kann auf nachfolgende Anfragen für denselben Teil aus dem Cache antworten.

Bei einer Bereichsanforderung für ein komprimiertes Objekt basiert der angeforderte Bytebereich auf der komprimierten Größe und nicht auf der Originalgröße des Objekts. Weitere Informationen zur Komprimierung von Dateien finden Sie unter Bereitstellen von komprimierten Dateien.