1001Ferramentas
📊 Dev

Parser de Range Header

Decompõe um header Range (bytes=0-499, bytes=-100 etc.) em ranges individuais com início, fim e tamanho.

Range: pedir só um pedaço do arquivo

O cabeçalho Range pede um intervalo de bytes em vez do recurso inteiro, e é o que sustenta retomar download interrompido e arrastar a barra de um vídeo sem baixar o que vem antes. A forma é a unidade, um igual, e a lista de intervalos. Cole o valor e a página calcula início, fim e tamanho de cada intervalo pedido.

Os índices são inclusivos nas duas pontas, o que é a fonte number one de erro de um byte: bytes=0-499 pede 500 bytes, não 499. E existe a forma de sufixo, com o primeiro número ausente — bytes=-500 significa os últimos 500 bytes do arquivo, e não do começo até o byte 500. Confundir as duas devolve o pedaço errado sem nenhum erro.

A resposta correta a um Range atendido é 206 com Content-Range dizendo qual faixa foi entregue e o tamanho total. Se o servidor ignorar o pedido e responder 200 com o arquivo inteiro, o cliente tem de lidar com isso — e é por isso que o servidor anuncia a capacidade em Accept-Ranges antes de qualquer pedido.

Perguntas frequentes

O que acontece se eu pedir além do fim do arquivo?
O servidor deve responder 416, indicando faixa não satisfazível, e informar o tamanho real em Content-Range. Já um intervalo que começa dentro e termina depois do fim é válido: o servidor entrega até o último byte, sem erro.
Pedir vários intervalos de uma vez funciona?
Funciona, e a resposta vira multipart com uma parte por intervalo. Na prática é pouco usado, porque montar e ler multipart dá mais trabalho que fazer duas requisições — e vários servidores e intermediários recusam múltiplos intervalos justamente por isso.
Como o servidor sabe que o arquivo não mudou entre pedaços?
Pelo If-Range, que acompanha o Range levando o ETag ou a data recebidos antes. Se o recurso mudou, o servidor responde 200 com o conteúdo novo inteiro em vez de 206 — o que evita costurar pedaços de duas versões diferentes e produzir um arquivo corrompido.

Ferramentas Relacionadas