Scarica file grandi con richieste di intervallo

Una richiesta di intervallo chiede al server di inviare solo una parte di un file. Una singola GET richiesta scarica l'intero file. Con le richieste di intervallo, puoi scaricare un file grande in diverse richieste più piccole, oppure riprendere un download interrotto invece di ricominciare dall'inizio.

Richiedi un poligono

Per richiedere una parte di un file, invia l'intestazione Range con le posizioni del primo e dell'ultimo byte che desideri. Le posizioni partono da 0, e il range include entrambe le posizioni. Ad esempio, bytes=0-1048575 richiede i primi 1 MiB di un file da 10 MiB:

GET /api/3.0/fs/files/Volumes/main/default/my-volume/large-file.bin
Range: bytes=0-1048575

206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 0-1048575/10485760
Content-Length: 1048576
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
<binary data>

La 206 Partial Content risposta contiene solo i byte richiesti. L'intestazione Content-Range mostra quali byte contiene la risposta e la dimensione totale del file.

Per richiedere tutto da una posizione fino alla fine del file, ometti l'ultima posizione, ad bytes=1048576-esempio . Se l'ultima posizione è oltre la fine del file, la risposta contiene i byte fino alla fine del file.

Una HEAD richiesta con intestazione Range restituisce lo stesso stato e le stesse intestazioni della richiesta corrispondente GET , senza il corpo.

Riprendere un download interrotto

Se un download viene interrotto, non devi scaricare di nuovo tutto il file. Richiedi i byte rimanenti con un intervallo che inizia dal primo byte che non hai ricevuto.

Il file può cambiare tra le tue richieste, e combinare byte da diverse versioni del file corrompe il risultato. Per evitare questo, invia If-Match la ETag tua prima risposta. Se il file rimane invariato, il server restituisce i byte rimanenti:

GET /api/3.0/fs/files/Volumes/main/default/my-volume/large-file.bin
Range: bytes=1048576-
If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 1048576-10485759/10485760
Content-Length: 9437184
<binary data>

Se il file è cambiato, il server torna 412 Precondition Failed invece e puoi ricominciare il download.