Um cliente recebeu os primeiros 500 bytes de um arquivo e perdeu a conexão. Para continuar, pode pedir os bytes a partir da posição 500. Antes de anexar a resposta, precisa saber se o arquivo continua na mesma versão.
Retomada com um ETag forte
Suponha que a primeira resposta tenha trazido ETag: "v1" para um arquivo de 1.000 bytes. Em um servidor que atende intervalos, o cliente pode enviar:
GET /arquivo.bin HTTP/1.1
Host: example.org
Range: bytes=500-
If-Range: "v1"
Se o ETag forte ainda coincide, a resposta parcial esperada é 206 com Content-Range: bytes 500-999/1000. Os limites são inclusivos. Confira o status e a posição inicial antes de anexar os bytes ao arquivo local.
Se a versão mudou para "v2", o servidor ignora Range ao avaliar If-Range. Em um GET bem-sucedido, o cliente recebe 200 com a representação inteira. Nesse caso, substitua o arquivo parcial. Anexar a resposta inteira misturaria versões e repetiria bytes.
Intervalo fora do arquivo
Peça bytes=1000- para a versão de 1.000 bytes. Se o servidor processa Range e considera o intervalo insatisfazível, pode responder 416 com Content-Range: bytes */1000. Use esse tamanho para conferir o estado local antes de tentar novamente. Um ETag fraco, como W/"v1", não deve ser enviado em If-Range.