Come CloudFront elabora le richieste parziali per un oggetto (range GETs) - Amazon CloudFront

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Come CloudFront elabora le richieste parziali per un oggetto (range GETs)

Per un oggetto di grandi dimensioni, il visualizzatore (il browser web o un altro client) può eseguire più richieste GET e utilizzare l'intestazione della richiesta Range per scaricare l'oggetto in parti più piccole. Queste richieste per intervalli di byte, talvolta note come richieste Range GET, migliorano l'efficienza di download parziali e il ripristino da parte di trasferimenti in parte non riusciti.

Quando CloudFront riceve una Range GET richiesta, controlla la cache nell'edge location che ha ricevuto la richiesta. Se la cache in quella edge location contiene già l'intero oggetto o la parte dell'oggetto richiesta, serve CloudFront immediatamente l'intervallo richiesto dalla cache.

Se la cache non contiene l'intervallo richiesto, CloudFront inoltra la richiesta all'origine. (Per ottimizzare le prestazioni, CloudFront può richiedere un intervallo più ampio di quello richiesto dal client inRange GET.) Cosa succede dopo varia a seconda che il server di origine supporti o meno le richieste Range GET:

  • Se l'origine supporta Range GET le richieste, restituisce l'intervallo richiesto. CloudFront serve l'intervallo richiesto e lo memorizza anche nella cache per richieste future. (Amazon S3) supporta le richieste Range GET, così come molti server HTTP.)

  • Se l'origine non supporta Range GET le richieste, restituisce l'intero oggetto. CloudFront serve la richiesta corrente inviando l'intero oggetto e memorizzandolo anche nella cache per richieste future. Dopo aver CloudFront memorizzato l'intero oggetto in una cache edge, risponde alle nuove Range GET richieste servendo l'intervallo richiesto.

In entrambi i casi, CloudFront inizia a servire l'intervallo o l'oggetto richiesto all'utente finale non appena il primo byte arriva dall'origine.

Nota

Se il visualizzatore effettua una Range GET richiesta e l'origine CloudFront ritornaTransfer-Encoding: chunked, restituisce l'intero oggetto al visualizzatore anziché l'intervallo richiesto.

CloudFront segue generalmente le specifiche RFC per l'Rangeintestazione. Tuttavia, se le Range intestazioni non soddisfano i seguenti requisiti, CloudFront restituisce il codice di stato HTTP con l'oggetto completo anziché il codice di stato 200 con gli intervalli specificati: 206

  • Gli intervalli devono essere elencati in ordine crescente. Ad esempio, 100-200,300-400 è valido, 300-400,100-200 non è valido.

  • Gli intervalli non devono sovrapporsi. Ad esempio, 100-200,150-250 non è valido.

  • Tutti le specifiche degli intervalli devono essere valide. Ad esempio, non puoi specificare un valore negativo come parte di un intervallo.

Per ulteriori informazioni su intestazione della richiesta Range, consulta Richieste di intervallo in RFC 7233 oppure Range nei documenti Web MDN.

Utilizzare richieste di intervallo per memorizzare nella cache oggetti di grandi dimensioni

Quando la memorizzazione nella cache è abilitata, CloudFront non recupera o memorizza nella cache un oggetto di dimensioni superiori a 50 GB. Quando un'origine indica che l'oggetto è più grande di questa dimensione (nell'intestazione della Content-Length risposta), CloudFront chiude la connessione all'origine e restituisce un errore al visualizzatore. (Con la memorizzazione nella cache disattivata, CloudFront può recuperare un oggetto più grande di questa dimensione dall'origine e passarlo al visualizzatore. Tuttavia, CloudFront non memorizza l'oggetto nella cache.)

Tuttavia, con le richieste di intervallo, è possibile utilizzare CloudFront per memorizzare nella cache un oggetto che è più grande della dimensione massima del file memorizzabile nella cache.

Esempio
  1. Considerate un'origine con un oggetto da 100 GB. Con la memorizzazione nella cache abilitata, CloudFront non recupera o memorizza nella cache un oggetto così grande. Tuttavia, il visualizzatore può inviare più richieste di intervallo per recuperare l'oggetto in parti, con ciascuna parte inferiore a 50 GB.

  2. Il visualizzatore può richiedere l'oggetto in parti da 20 GB inviando una richiesta con l'intestazione Range: bytes=0-21474836480 per recuperare la prima parte, un'altra richiesta con l'intestazione Range: bytes=21474836481-42949672960 per recuperare la parte successiva e così via.

  3. Quando il visualizzatore ha ricevuto tutte le parti, può combinarle per costruire l'oggetto originale da 100 GB.

  4. In questo caso, CloudFront memorizza nella cache ciascuna delle parti da 20 GB dell'oggetto e può rispondere alle richieste successive per la stessa parte dalla cache.