Skip to main content

🎯 Error 416 – Rango solicitado no satisfacible (Range Not Satisfiable)

El error 416 aparece cuando el cliente solicita una parte específica (un rango) de un archivo o recurso usando la cabecera Range, pero ese rango no puede ser cumplido por el servidor.

Es decir: el cliente pidió bytes fuera del tamaño real del archivo, o el servidor no puede servir ese rango.

Este error es muy común en:

  • Descargas

  • Videos y audios con reproducción parcial

  • APIs de archivos

  • Peticiones que requieren rangos (Resume download)


Causas más comunes

  • 📏 El rango solicitado excede el tamaño real del archivo.
    Ejemplo: pedir bytes del 5000–6000 en un archivo de solo 4000 bytes.

  • 🎞️ Clientes multimedia piden rangos incorrectos al hacer “seek” en videos o audios.

  • 📂 El archivo está vacío o tiene tamaño 0 (no se puede servir nada).

  • 🔧 El servidor no tiene habilitado el soporte para rangos (Accept-Ranges).

  • 🧩 Descargas interrumpidas que intentan reanudarse con un rango inválido.

  • 🚫 Manipulación errónea de la cabecera Range por parte del navegador o una app.

  • ⚙️ El archivo fue modificado después de iniciar la descarga, causando inconsistencias.


🔧 Soluciones recomendadas

1️⃣ Verificar el tamaño real del archivo

Si el cliente solicita:


Range: bytes=7000-9000

pero el archivo mide 6900 bytes → 416.

Solución:
Calcular y pedir un rango válido.


2️⃣ Habilitar soporte de rangos en el servidor

Apache:

Asegúrate de que no esté deshabilitado:


Accept-Ranges: bytes

Nginx:

Debe tener:


aio on;

y permitir rangos correctamente.


3️⃣ Evitar reanudar descargas corruptas

Si un cliente intenta continuar una descarga:


Range: bytes=350000-

pero el archivo cambió o tiene otro tamaño → 416.

Solución: volver a descargar desde cero.


4️⃣ Revisar servidores de streaming

Errores comunes en:

  • Videos MP4

  • Audio MP3

  • Streaming HLS / DASH

Asegúrate de que el archivo no esté dañado ni incompleto.


5️⃣ Corregir peticiones en aplicaciones o APIs

Ejemplos de rangos mal formados:


Range: bytes=-100 Range: bytes=abc-xyz Range: bytes=999999999-

Debes validar la entrada antes de enviarla.


6️⃣ Verificar que el archivo no esté vacío

Si size = 0, cualquier rango es inválido → 416.

Solución:
Revisar por qué el archivo está vacío o incompleto.


7️⃣ Enviar respuesta correcta de error

El servidor debe incluir:


Content-Range: */<tamaño_del_archivo>

Ejemplo:


Content-Range: */4096

Esto indica cuál es el rango válido máximo.


🔐 Consejo Pro

Cuando implementes descargas o streaming:

  • Valida rangos por adelantado

  • Usa chunks (fragmentos) de tamaño fijo

  • Implementa reanudación segura

  • Siempre devuelve cabeceras Accept-Ranges y Content-Range correctas

Esto evita errores 416 y mejora la experiencia de descarga y reproducción.