So CloudFront verarbeitet Teilanforderungen 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.

So CloudFront verarbeitet Teilanforderungen 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 eine Range GET Anforderung CloudFront empfängt, überprüft es den Cache am Edge-Standort, der die Anforderung empfangen hat. Wenn der Cache an diesem Edge-Standort bereits das gesamte Objekt oder den angeforderten Teil des Objekts enthält, stellt CloudFront sofort den angeforderten Bereich aus dem Cache bereit.

Wenn der Cache den angeforderten Bereich nicht enthält, CloudFront leitet die Anforderung an den Ursprung weiter. (Um die Leistung zu optimieren, CloudFront kann einen größeren Bereich anfordern als der Client, der in der angefordert wurdeRange GET.) Der nächste Schritt hängt davon ab, ob der Ursprung Range GET-Anfragen unterstützt:

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

  • Wenn der Ursprung keine Range GET Anfragen unterstützt: Es gibt das gesamte Objekt zurück. CloudFront bedient die aktuelle Anfrage, indem es das gesamte Objekt sendet und es gleichzeitig für zukünftige Anfragen zwischenspeichert. Nachdem das gesamte Objekt in einem Edge-Cache CloudFront zwischengespeichert hat, antwortet es auf neue Range GET Anfragen, indem es den angeforderten Bereich bedient.

In beiden Fällen CloudFront beginnt damit, dem Endbenutzer den angeforderten Bereich oder das angeforderte Objekt bereitzustellen, sobald das erste Byte vom Ursprung eintrifft.

Anmerkung

Wenn der Betrachter eine -Range GETAnforderung stellt und der Ursprung zurückgibtTransfer-Encoding: chunked, CloudFront gibt das gesamte Objekt an den Betrachter statt an den angeforderten Bereich zurück.

CloudFront folgt im Allgemeinen der RFC-Spezifikation für den -RangeHeader. 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, ruft kein Objekt ab, das größer als 50 GB ist, und CloudFront speichert es nicht im Cache. Wenn ein Ursprung angibt, dass das Objekt größer als diese Größe ist (im Content-Length Antwort-Header), CloudFront schließt die Verbindung zum Ursprung und gibt einen Fehler an den Viewer zurück. (Wenn das Caching deaktiviert ist, CloudFront kann ein Objekt, das größer als diese Größe ist, vom Ursprung abrufen und an den Viewer übergeben. Das Objekt CloudFront wird jedoch nicht zwischengespeichert.)

Bei Bereichsanfragen können Sie jedoch verwenden, CloudFront um ein Objekt zwischenzuspeichern, das größer als die maximale cachefähige Dateigröße ist. Nehmen wir beispielsweise einen Ursprung mit einem Objekt mit 100 GB an. Wenn das Caching aktiviert CloudFront ist, ruft ein Objekt nicht so groß ab oder speichert es im Cache. Der Viewer kann jedoch mehrere Bereichsanforderungen senden, um dieses Objekt in Teilen abzurufen, wobei die Teile jeweils kleiner als 50 GB sind. Zum Beispiel kann der Viewer 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. Nachdem der Viewer alle Teile empfangen hat, kann er sie kombinieren, um das ursprüngliche Objekt mit 100 GB zu erstellen. In diesem Fall CloudFront speichert jeden der 20 GB Teile des Objekts zwischen und kann auf nachfolgende Anfragen für denselben Teil aus dem Cache antworten.