Contenido

    Respuesta del servidor 416 Range Not Satisfiable

    Código de estado HTTP 416 (Rango no satisfactible)

    El código de estado HTTP 416 indica que el rango solicitado por el cliente no puede ser satisfecho por el servidor. Esto ocurre cuando el cliente intenta acceder a una parte de un recurso, pero el rango especificado se encuentra fuera de los límites de los datos disponibles. A continuación, se analizan las causas de este código de estado, ejemplos prácticos y métodos de corrección en distintos lenguajes de programación.

    416 - Range Not Satisfiable

    Causas de la aparición del código de estado 416

    1. Rango incorrectamente especificado

      El cliente puede cometer errores al especificar el rango, por ejemplo, solicitando un rango que excede el tamaño del archivo disponible. Esto puede suceder si el cliente no verifica la longitud del recurso antes de hacer la solicitud.

    2. Falta de datos en el servidor

      El recurso solicitado puede haber sido eliminado o modificado, resultando en un rango solicitado que excede los datos disponibles. En estos casos, el servidor no puede cumplir con la solicitud ya que el contenido ya no existe.

    3. Encabezados incorrectos

      Los encabezados Range mal configurados pueden provocar errores. Si el cliente envía un encabezado mal formado, el servidor no podrá interpretar correctamente el rango solicitado.

    Ejemplos prácticos

    • Ejemplo con un archivo de audio

      Un cliente solicita un rango que excede la duración del archivo de audio. El siguiente es un ejemplo del encabezado de solicitud y la respuesta del servidor:

                  GET /audio.mp3 HTTP/1.1
                  Range: bytes=1000000-
                  HTTP/1.1 416 Range Not Satisfiable
              
    • Ejemplo con una imagen

      El cliente intenta obtener una parte de una imagen que ha sido modificada, y no está al tanto de los nuevos tamaños:

                  GET /image.jpg HTTP/1.1
                  Range: bytes=5000-10000
                  HTTP/1.1 416 Range Not Satisfiable
              
    • Ejemplo con un archivo de texto

      El cliente hace una solicitud para un archivo de texto, pero el rango solicitado está fuera de los límites del archivo:

                  GET /document.txt HTTP/1.1
                  Range: bytes=2000-3000
                  HTTP/1.1 416 Range Not Satisfiable
              

    Corrección del error 416 en diferentes lenguajes de programación

    Lenguaje Descripción Ejemplo de código
    Python Verificación de la validez del rango antes de enviar la solicitud.
    import requests
    
    def request_range(url, start, end):
        headers = {'Range': f'bytes={start}-{end}'}
        response = requests.get(url, headers=headers)
        if response.status_code == 416:
            print("Error: Rango no satisfactible.")
        
    JavaScript Uso de Fetch API para solicitar un rango y manejar la respuesta 416.
    fetch('https://example.com/file.mp3', {
        headers: {'Range': 'bytes=0-999'}
    }).then(response => {
        if (response.status === 416) {
            console.error("Error: Rango no satisfactible.");
        }
    });
                
    PHP Realización de una solicitud cURL con el encabezado Range y manejo del estado 416.
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://example.com/file.txt');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Range: bytes=1000-2000'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 416) {
        echo "Error: Rango no satisfactible.";
    }
                

    El código de estado 416 señala problemas relacionados con la indisponibilidad del rango de datos solicitado. Para evitar este estado, es crucial especificar correctamente los rangos y manejar adecuadamente los errores en el lado del cliente.