Content-Range
Uso
La cabecera Content-Range aparece en las respuestas 206 Partial Content cuando un servidor satisface una solicitud Range entregando solo una parte de un recurso. La cabecera especifica el rango de bytes del contenido parcial y el tamaño total del recurso completo.
Las solicitudes de rango permiten descargas eficientes. Un cliente interrumpido durante la transferencia de un archivo grande reanuda desde el punto en que se cortó la conexión en lugar de empezar de nuevo. Los reproductores multimedia usan solicitudes de rango para situarse en posiciones concretas de archivos de audio o vídeo sin descargar todo el flujo.
Los servidores anuncian la compatibilidad con solicitudes de rango mediante la cabecera Accept-Ranges, normalmente con el valor bytes. Cuando una solicitud de rango pide un rango de bytes que excede los límites del recurso, el servidor responde con 416 Range Not Satisfiable e incluye una cabecera Content-Range que muestra el tamaño real del recurso.
La sintaxis sigue un formato estructurado con tres componentes: la unidad (casi siempre bytes), el rango de bytes y el tamaño completo.
Content-Range: <unit> <range-start>-<range-end>/<size>
unit
El tipo de unidad del rango. El valor bytes es la única unidad implementada de forma generalizada.
range-start
Un entero de base cero que indica el primer byte del rango devuelto.
range-end
Un entero de base cero que indica el último byte del rango devuelto, incluido.
size
El tamaño total del recurso completo en bytes. Un asterisco (*) sustituye al tamaño cuando la longitud total se desconoce, como ocurre con el contenido en streaming o generado dinámicamente.
Ejemplo
Un cliente reanuda una descarga a partir del byte 1000 de un archivo cuyo tamaño total es de 65.000 bytes. El servidor devuelve los bytes del 1000 al 2000, ambos incluidos.
Content-Range: bytes 1000-2000/65000
Un recurso en streaming entrega un rango sin conocer el tamaño total. El asterisco indica que la longitud completa es desconocida.
Content-Range: bytes 1000-2000/*
Un servidor rechaza una solicitud de rango porque los bytes solicitados superan el tamaño del recurso. La respuesta lleva el estado 416 Range Not Satisfiable e informa del tamaño real.
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */50000
Una respuesta de rangos multiparte entrega varios rangos en una sola respuesta. Cada parte incluye su propia cabecera Content-Range dentro del cuerpo multipart/byteranges.
HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=BOUNDARY
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 0-499/10000
[first 500 bytes]
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 9500-9999/10000
[last 500 bytes]
--BOUNDARY--
Nota
Content-Length indica el tamaño total del cuerpo del mensaje en bytes. Content-Range identifica qué segmento concreto de bytes del recurso completo contiene la respuesta actual. Una respuesta completa usa únicamente Content-Length; una respuesta 206 Partial Content usa ambas cabeceras a la vez.