Битлента
Ошибки и коды3 мин чтения·

HTTP 406 Not Acceptable: сервер не может отдать данные в нужном формате

Что означает HTTP 406 Not Acceptable, как он связан с заголовками Accept и защитными правилами сервера и что проверить пользователю и разработчику.

Смысл ошибки

Код 406 возвращается, когда сервер не может сформировать ответ, отвечающий требованиям клиента, заданным в заголовках Accept, Accept-Language, Accept-Encoding и им подобных. Клиент говорит: «Мне подойдёт только такой формат», а у сервера его нет. Так задумано в протоколе, называется это согласованием содержимого.

На практике 406 встречается заметно реже, чем можно ожидать по теории, так как большинство серверов отдают ответ в любом случае. Поэтому встретив 406, сразу подумайте о защитном модуле.

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

Как он появляется в жизни

Чаще всего 406 выдают модули безопасности и фильтры веб-сервера. Они анализируют запрос и, если он похож на подозрительный, например содержит необычные символы или странный набор заголовков, возвращают именно этот код. Такое бывает при отправке форм с определёнными словами и знаками, при загрузке файлов и работе с редакторами текста.

Вторая ситуация: приложение API запросило формат, который не поддерживается, например JSON вместо XML. Третья: клиент запрашивает язык или кодировку, которой у сервера нет, и не допускает запасных вариантов. Четвёртая: сторонние программы и скрипты, отправляющие нестандартные заголовки.

Что сделать пользователю

Повторите действие, изменив содержимое: если ошибка появляется при отправке формы, уберите из текста необычные символы, кавычки, скобки, ссылки и повторите. Попробуйте другой браузер и приватное окно без расширений, которые изменяют заголовки запросов.

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

Не стоит отправлять форму много раз подряд.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Проверка разработчика

Посмотрите, какие заголовки Accept отправляет клиент и какие форматы поддерживает сервер. Если вы разрабатываете API, вернуть 406 разумно, когда клиент требует формат, который вы не отдаёте, и указать в теле список доступных. В остальных случаях безопаснее отдавать формат по умолчанию.

Если 406 возникает у пользователей случайно, проверьте журнал модуля защиты: там обычно записано срабатывающее правило. Настройте правило точнее или добавьте исключение для конкретного пути, но не отключайте защиту целиком. Проверьте и прокси, стоящий перед сервером.

Отличия от соседних кодов

Код 415 говорит о том, что сервер не принимает тип данных, присланный в запросе, а 406 — что сервер не может отдать ответ в требуемом формате. То есть 415 про то, что клиент отправил, а 406 — про то, что клиент хочет получить. Код 400 указывает на общую некорректность запроса. Знание этой разницы существенно помогает и при разработке, и при диагностике чужого сервиса.

Когда 406 приходит от защитных модулей

Если сервер работает под управлением популярных веб-серверов с модулями защиты приложений, то набор правил по умолчанию может отклонять запросы с признаками атак: определённые комбинации символов, подозрительные пути, необычные типы содержимого. Ответом нередко служит именно 406, и владельцу сайта непонятно, почему нормальные посетители видят ошибку.

Проверьте журнал модуля: он покажет идентификатор правила. Затем сузьте его действие для нужного адреса или поправьте формат данных, который отправляет ваше приложение. Если ошибка вызвана редактором текста на сайте, попробуйте отправку без вставки готового кода и специальных символов. Постепенно найдёте, какой именно фрагмент вызывает срабатывание, и решите проблему без отключения защиты.

Порядок действий коротко: Упростить отправляемый текст и убрать необычные символы; отключить расширения; попробовать другой браузер; сообщить владельцу время и действие. Разработчику: сверить заголовки Accept, изучить журнал модуля защиты, уточнить правило, предусмотреть формат по умолчанию. Разница между 406 и 415 состоит в направлении: первый про желаемый ответ, второй про присланные данные.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
http406заголовки

Часто задаваемые вопросы

Читайте также