Ошибка HTTP 416 - Range Not Satisfiable. Что это такое и как ее исправить?

При разработке или поддержке веб-приложений, которые предоставляют загружаемый контент (например, видео, аудио или большие файлы), вы можете столкнуться с ошибкой HTTP 416, официально известной как 416 Range Not Satisfiable.

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

Что такое ошибка HTTP 416?

Код состояния HTTP 416 (Range Not Satisfiable) возвращается сервером, когда клиент запрашивает часть ресурса (используя заголовок Range), которую Сервер не может предоставить.

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

Range: bytes=1000000-2000000

но файл имеет размер всего 500 000 байт, сервер ответит следующим образом:

HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */500000

Это означает, что клиент запросил байты, которые выходят за границы ресурса.

Когда вы обычно можете столкнуться с ошибкой HTTP 416?

Ошибка всегда возникает при наличии заголовка Range. Как в описанных ранее сценариях:

  1. Возобновление загрузки с неверным смещением Когда пользователь возобновляет частично загруженный файл, браузер (или менеджер загрузок) может запросить диапазон байт, который больше не существует – например, если файл был обновлен или удален. Пример: Видеоролик размером 5 МБ был частично загружен, но затем обновлен до 3 МБ. Запрос на возобновление до байта 5000000 будет неудачным.
  2. Баги JavaScript медиаплееров Многие пользовательские аудио/видеоплееры используют заголовки Range для загрузки определенных фрагментов. Если скрипт неправильно вычисляет диапазоны, пользователи могут увидеть битые медиафайлы или ошибку 416 в DevTools.
  3. Ручные запросы диапазонов ресурсов или API В API или CLI-инструментах (например, curl) разработчики иногда явно запрашивают недействительные диапазоны во время тестирования или загрузки скриптов. curl -H Range: bytes=99999999-100000000 http://example.com/video.mp4. Если файл не такой большой, запрос не проходит с кодом состояния 416.
  4. Обслуживание пустых или поврежденных файлов Если сервер пытается ответить на запрос Range для пустого файла (0 байт), любой запрошенный диапазон будет недействительным.

Как устранить код ошибки 416

Очистить кэш браузера

Прежде всего, попробуйте очистить кэш браузера, а затем повторить попытку. Иногда некоторые ресурсы могут обновляться, сохраняя при этом старое кэшированное содержимое. Вы можете выполнить следующие шаги для очистки кэша браузера как в Chrome, так и в Firefox.

Для Firefox

  1. Откройте Firefox.
  2. Нажмите на меню в правом верхнем углу.
  3. Перейдите в раздел «Настройки» (или «Параметры» на macOS).
  4. Нажмите Конфиденциальность & Безопасность слева.
  5. Прокрутите страницу до раздела «Файлы cookie и данные сайта».
  6. Нажмите кнопку Очистить данные.

Для Chrome

  1. Откройте Chrome.
  2. Нажмите на меню в правом верхнем углу.
  3. Перейдите в раздел Настройки >> конфиденциальность и Безопасность >> Очистить данные просмотра.
  4. На вкладке Основные Временной диапазон: выберите Все время (или по мере необходимости)o Установите флажок Кэшированные изображения и файлы.
  5. Нажмите кнопку Очистить данные. Остановите загрузку файла и попробуйте загрузить его снова. При загрузке больших файлов загрузка может быть прервана, а после возобновления вы можете столкнуться с сообщением об ошибке 416. Однако не стоит беспокоиться, начните загрузку с самого начала, и в большинстве случаев проблема будет решена.

Проверьте журналы приложения или Apache/Nginx

Чтобы лучше понять причину проблемы, вы можете просмотреть журналы Apache/Nginx или приложений для дальнейшего расследования и выявления более подробных сообщений, которые могут раскрыть точную причину ошибки 416. Для веб-серверов Apache вы можете проверить, включен ли mod_headers и правильно ли настроен Accept-Ranges. Если проблема сохраняется, можно отключить запросы диапазона, что не рекомендуется для сайтов с большим количеством медиаресурсов. Вы можете отключить запросы диапазона, добавив следующую строку в файл .htaccess.

Header unset Accept-Ranges

Заключение

Ошибка HTTP 416 может быть особенно сложной, особенно при работе с медиафайлами или частичной доставке контента. Понимание того, как работают заголовки Range, и обеспечение того, чтобы ваш сервер или приложение соблюдали границы контента, является ключом к предотвращению этой проблемы. Независимо от того, являетесь ли вы конечным пользователем, разработчиком или системным администратором, систематический подход поможет вам эффективно устранить ошибку 416.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Комментарии (0)

Опубликовать