Range
Uso
La cabecera Range permite la recuperación parcial de un recurso. Un cliente incluye esta cabecera para solicitar rangos de bytes concretos en lugar de descargar el recurso completo. Esto resulta esencial para reanudar descargas interrumpidas, para la reproducción en streaming de contenido multimedia con soporte de búsqueda y para cargar archivos grandes en segmentos paralelos.
Antes de enviar una solicitud de rango, el cliente verifica que el servidor lo admita comprobando la cabecera Accept-Ranges de una respuesta anterior. Un valor de bytes confirma que el servidor gestiona solicitudes de rangos de bytes. Un valor de none indica que el servidor no acepta solicitudes de rango.
Cuando una solicitud de rango tiene éxito, el servidor responde con 206 Partial Content e incluye la cabecera Content-Range, que indica las posiciones de bytes y el tamaño total del recurso. Varios rangos en una misma solicitud producen una respuesta multiparte, en la que cada parte lleva sus propias cabeceras Content-Range y Content-Type.
Si el rango solicitado queda fuera de los límites del recurso, el servidor devuelve 416 Range Not Satisfiable. En algunos casos, el servidor ignora por completo la cabecera Range y entrega el recurso íntegro con un estado 200.
unit
La unidad especifica la medida utilizada para los rangos. bytes es la unidad estándar definida en la especificación de HTTP. Se permiten unidades de rango personalizadas, pero rara vez se usan.
range-start y range-end
El valor range-start es el desplazamiento de bytes en base cero donde comienza el rango (obligatorio). El valor range-end es el desplazamiento de bytes en base cero donde termina el rango (opcional). Omitir range-end solicita todos los bytes desde range-start hasta el final del recurso.
suffix-length
La forma suffix-length solicita los últimos N bytes de un recurso. El formato -N recupera los N bytes finales sin necesidad de conocer el tamaño total del recurso.
Ejemplo
Un cliente solicita los primeros 1.000 bytes de un archivo de imagen grande. El servidor responde con 206 Partial Content y especifica el rango de bytes y el tamaño total del archivo en la cabecera Content-Range.
GET /photo.jpg HTTP/1.1
Host: cdn.example.re
Range: bytes=0-999
HTTP/1.1 206 Partial Content
Content-Type: image/jpeg
Content-Length: 1000
Content-Range: bytes 0-999/250000
Un cliente reanuda una descarga a partir del byte 50.000. Omitir el valor final solicita todo lo que hay desde el desplazamiento indicado hasta el final del recurso.
Range: bytes=50000-
Un cliente solicita los últimos 500 bytes de un archivo. La forma de sufijo resulta útil cuando el cliente desconoce el tamaño total del archivo.
Range: bytes=-500
Un cliente solicita dos rangos de bytes distintos en una sola solicitud. El servidor devuelve una respuesta multiparte con cada segmento como una parte independiente del cuerpo.
Range: bytes=0-499, 1000-1499