Fazer download de arquivos grandes com solicitações de intervalo
Uma solicitação de intervalo solicita que o servidor envie apenas parte de um arquivo. Uma única solicitação GET download o arquivo inteiro. Com solicitações de intervalo, você pode download um arquivo grande em várias solicitações menores ou retomar um download interrompido em vez de iniciá-lo novamente do início.
Solicitar um intervalo
Para solicitar parte de um arquivo, envie o cabeçalho Range com as posições dos primeiro e último bytes desejados. As posições começam em 0 e o intervalo inclui ambas as posições. Por exemplo, bytes=0-1048575 solicita o primeiro 1 MiB de um arquivo de 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>
A resposta 206 Partial Content contém apenas os bytes solicitados. O cabeçalho Content-Range mostra quais bytes a resposta contém e o tamanho total do arquivo.
Para solicitar tudo de uma posição até o final do arquivo, omita a última posição, por exemplo bytes=1048576-. Se a última posição estiver após o final do arquivo, a resposta conterá os bytes até o final do arquivo.
Uma solicitação HEAD com um cabeçalho Range retorna o mesmo status e cabeçalhos que a solicitação GET correspondente, sem o corpo.
Retomar um download interrompido
Se um download for interrompido, você não precisará baixar o arquivo inteiro novamente. Solicite os bytes restantes com um intervalo que começa no primeiro byte que você não recebeu.
O arquivo pode mudar entre suas solicitações, e combinar bytes de versões diferentes do arquivo corrompe o resultado. Para evitar isso, envie If-Match com o ETag da sua primeira resposta. Se o arquivo não foi alterado, o servidor retorna os bytes restantes:
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 o arquivo mudou, o servidor retorna 412 Precondition Failed em vez disso, e você pode começar o download novamente.