Wie CloudFront werden Teilanforderungen für ein Objekt verarbeitet (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 werden Teilanforderungen für ein Objekt verarbeitet (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 empfängt, überprüft es den Cache an dem Edge-Standort, der die Anfrage erhalten hat. 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 wird die Anfrage an den Ursprung weitergeleitet. (Um die Leistung zu optimieren, wird CloudFront möglicherweise ein größerer Bereich angefordert, als der Client im 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, gibt er den angeforderten Bereich zurück. CloudFront bedient den angeforderten Bereich und speichert ihn auch für future Anfragen. (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 es das gesamte Objekt sendet und es gleichzeitig für future Anfragen zwischenspeichert. 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 für 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 anstelle des angeforderten Bereichs an den Betrachter zurückgegeben.

CloudFront folgt im Allgemeinen der RFC-Spezifikation für den Range Header. Wenn Ihre Range Header jedoch nicht den folgenden Anforderungen entsprechen, wird der HTTP-Statuscode 200 mit dem vollständigen Objekt anstelle des Statuscodes 206 mit den angegebenen Bereichen CloudFront zurückgegeben:

  • 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 ein Objekt, das größer als 50 GB ist, CloudFront nicht abgerufen oder zwischengespeichert. 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 es wird ein Fehler an den Viewer zurückgegeben. ( CloudFront Kann bei deaktiviertem Caching ein Objekt, das größer als diese Größe ist, vom Ursprung abrufen und an den Betrachter weitergeben. Zwischenspeichert das Objekt jedoch CloudFront nicht.)

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

Beispiel
  1. Stellen Sie sich einen Ursprung mit einem 100-GB-Objekt vor. Ruft bei aktiviertem Caching CloudFront kein Objekt dieser Größe ab oder speichert es nicht im Cache. Der Viewer kann jedoch mehrere Bereichsanforderungen senden, um dieses Objekt in Teilen abzurufen, wobei die Teile jeweils kleiner als 50 GB sind.

  2. Der Betrachter kann das Objekt in Teilen von 20 GB anfordern, indem er eine Anfrage mit dem Header Range: bytes=0-21474836480 zum Abrufen des ersten Teils, eine weitere Anfrage mit dem Header Range: bytes=21474836481-42949672960 zum Abrufen des nächsten Teils usw. sendet.

  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 er jeden der 20 GB-Teile des Objekts im Cache und kann auf nachfolgende Anfragen für denselben Teil aus dem Cache antworten.