Содержание

    Ответ сервера 416 Range Not Satisfiable

    HTTP статус-код 416 (Range Not Satisfiable)

    HTTP статус-код 416 указывает на то, что запрашиваемый диапазон данных не может быть удовлетворен сервером. Данный ответ возникает, когда клиент пытается получить часть ресурса, но указанный диапазон выходит за пределы доступных данных. В этой статье мы рассмотрим причины возникновения данного статус-кода, практические примеры его применения и способы исправления ошибок на различных языках программирования.

    416 - Диапазон не достижим

    Причины возникновения статус-кода 416

    • Неверно заданный диапазон

      Клиент может ошибиться при указании диапазона, например, запросить диапазон, который превышает размер файла. Это приводит к тому, что сервер не может выполнить запрос.

    • Отсутствие данных на сервере

      Ситуации, когда ресурс был удален или изменен, могут привести к тому, что запрашиваемый диапазон превышает доступные данные. Например, если файл был обрезан или удален, клиент не сможет получить нужный диапазон.

    • Неправильные заголовки

      Некорректно настроенные заголовки Range также могут стать причиной ошибки. Например, если диапазон указан в неверном формате или с ошибками, сервер не сможет его обработать.

    Практические примеры

    1. Пример с аудиофайлом

      Клиент запрашивает диапазон, который выходит за пределы длины аудиофайла. В запросе это может выглядеть следующим образом:

      GET /audio.mp3 HTTP/1.1
      Range: bytes=1000000-

      Если аудиофайл имеет длину всего 500000 байт, сервер вернет код 416.

    2. Пример с изображением

      Клиент пытается получить часть изображения, которое было изменено. Например, он запрашивает диапазон:

      GET /image.jpg HTTP/1.1
      Range: bytes=0-500

      Если изображение было уменьшено, и его размер теперь составляет 300 байт, сервер вернет статус 416.

    3. Пример с текстовым файлом

      Клиент отправляет запрос к текстовому файлу с указанием диапазона, который превышает размер файла:

      GET /text.txt HTTP/1.1
      Range: bytes=0-1000

      Если файл имеет лишь 800 байт, сервер ответит с кодом 416.

    Исправление ошибки 416 на различных языках программирования

    1. Python (с использованием библиотеки requests)

      Перед отправкой запроса клиент может проверить корректность диапазона:

      import requests
      
      url = 'http://example.com/file.mp3'
      range_header = {'Range': 'bytes=0-'}
      response = requests.get(url, headers=range_header)
      
      if response.status_code == 416:
          print('Ошибка: запрашиваемый диапазон недоступен.')
    2. JavaScript (с использованием Fetch API)

      Код для запроса диапазона и обработки ответа 416 может выглядеть следующим образом:

      fetch('http://example.com/image.jpg', {
          headers: {'Range': 'bytes=0-500'}
      })
      .then(response => {
          if (response.status === 416) {
              console.log('Ошибка: запрашиваемый диапазон недоступен.');
          }
      });
    3. PHP (с использованием cURL)

      Клиент может отправить запрос с заголовком Range и обработать статус 416:

      $ch = curl_init('http://example.com/text.txt');
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Range: bytes=0-1000'));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $response = curl_exec($ch);
      
      if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 416) {
          echo 'Ошибка: запрашиваемый диапазон недоступен.';
      }
      curl_close($ch);
    Язык программирования Пример кода
    Python Использование библиотеки requests для проверки диапазона.
    JavaScript Запрос диапазона с использованием Fetch API.
    PHP Отправка запроса с заголовком Range через cURL.

    Статус-код 416 указывает на проблемы с недоступностью запрашиваемого диапазона данных. Чтобы избежать этого статуса, важно правильно указывать диапазоны и обрабатывать возможные ошибки на стороне клиента.