Содержание

Что такое ошибка 400 Bad Request: как ее исправить

0 ∞ 2

Ошибка 400 Bad Request – это код ответа HTTP, который означает, что сервер не смог обработать запрос, отправленный клиентом из-за неверного синтаксиса. Подобные коды ответа HTTP отражают сложные взаимоотношения между клиентом, веб-приложением, сервером, а также зачастую сразу несколькими сторонними веб-сервисами. Из-за этого поиск причины появления ошибки может быть затруднён даже внутри контролируемой среды разработки.

В этой статье мы разберём, что значит ошибка 400 Bad Request (переводится как «Неверный запрос»), и как ее исправить

  • На стороне сервера или на стороне клиента?
  • Начните с тщательного резервного копирования приложения
  • Диагностика ошибки 400 Bad Request
  • Исправление проблем на стороне клиента
    • Проверьте запрошенный URL
    • Очистите соответствующие куки
    • Загрузка файла меньшего размера
    • Выйдите и войдите
  • Отладка на распространённых платформах
    • Откатите последние изменения
    • Удалите новые расширения, модули или плагины
    • Проверьте непреднамеренные изменения в базе данных
  • Поиск проблем на стороне сервера
    • Проверка на неверные заголовки HTTP
    • Просмотрите логи
  • Отладьте код приложения или скриптов

Все коды ответа HTTP из категории 4xx считаются ошибками на стороне клиента. Несмотря на это, появление ошибки 4xx не обязательно означает, что проблема как-то связана с клиентом, под которым понимается веб-браузер или устройство, используемое для доступа к приложению. Зачастую, если вы пытаетесь диагностировать проблему со своим приложением, можно сразу игнорировать большую часть клиентского кода и компонентов, таких как HTML, каскадные таблицы стилей (CSS), клиентский код JavaScript и т.п. Это также применимо не только к сайтам. Многие приложения для смартфонов, которые имеют современный пользовательский интерфейс, представляют собой веб-приложения.

С другой стороны, ошибка 400 Bad Request означает, что запрос, присланный клиентом, был неверным по той или иной причине. Пользовательский клиент может попытаться загрузить слишком большой файл, запрос может быть неверно сформирован, заголовки HTTP запроса могут быть неверными и так далее.

Мы рассмотрим некоторые из этих сценариев (и потенциальные решения) ниже. Но имейте в виду: мы не можем однозначно исключить ни клиент, ни сервер в качестве источника проблемы. В этих случаях сервер является сетевым объектом, генерирующим ошибку 400 Bad Request и возвращающим её как код ответа HTTP клиенту, но возможно именно клиент ответственен за возникновение проблемы.

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

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

Ошибка 400 Bad Request означает, что сервер (удалённый компьютер) не может обработать запрос, отправленный клиентом (браузером), вследствие проблемы, которая трактуется сервером как проблема на стороне клиента.

Существует множество сценариев, в которых ошибка 400 Bad Request может появляться в приложении. Ниже представлены некоторые наиболее вероятные случаи:

  • Клиент случайно (или намеренно) отправляет информацию, перехватываемую маршрутизатором ложных запросов. Некоторые веб-приложения ищут особые заголовки HTTP, чтобы обрабатывать запросы и удостовериться в том, что клиент не предпринимает ничего зловредного. Если ожидаемый заголовок HTTP не найден или неверен, то ошибка 400 Bad Request – возможный результат.
  • Клиент может загружать слишком большой файл. Большинство серверов или приложений имеют лимит на размер загружаемого файла, Это предотвращает засорение канала и других ресурсов сервера. Во многих случаях сервер выдаст ошибку 400 Bad Request, когда файл слишком большой и поэтому запрос не может быть выполнен.
  • Клиент запрашивает неверный URL. Если клиент посылает запрос к неверному URL (неверно составленному), это может привести к возникновению ошибки 400 Bad Request.
  • Клиент использует недействительные или устаревшие куки. Это возможно, так как локальные куки в браузере являются идентификатором сессии. Если токен конкретной сессии совпадает с токеном запроса от другого клиента, то сервер/приложение может интерпретировать это как злонамеренный акт и выдать код ошибки 400 Bad Request.

Устранение ошибки 400 Bad Request (попробуйте позже) лучше начать с исправления на стороне клиента. Вот несколько советов, что следует попробовать в браузере или на устройстве, которые выдают ошибку.

Наиболее частой причиной ошибки 400 Bad Request является банальный ввод некорректного URL. Доменные имена (например, internet-technologies.ru) нечувствительны к регистру, поэтому ссылка, написанная в смешанном регистре, такая как interNET-technologies.RU работает так же, как и нормальная версия в нижнем регистре internet-technologies.ru. Но части URL, которые расположены после доменного имени, чувствительными к регистру. Кроме случаев, когда приложение/сервер специально осуществляет предварительную обработку всех URL и переводит их в нижний регистр перед исполнением запроса.

Важно проверять URL на неподходящие специальные символы, которых в нем не должно быть. Если сервер получает некорректный URL, он выдаст ответ в виде ошибки 400 Bad Request.

Одной из потенциальных причин возникновения ошибки 400 Bad Request являются некорректные или дублирующие локальные куки. Файлы куки в HTTP – это небольшие фрагменты данных, хранящиеся на локальном устройстве, которые используются сайтами и веб-приложениями для «запоминания» конкретного браузера или устройства. Большинство современных веб-приложений использует куки для хранения данных, специфичных для браузера или пользователя, идентифицируя клиента и позволяя делать следующие визиты быстрее и проще.

Но куки, хранящие информацию сессии о вашем аккаунте или устройстве, могут конфликтовать с другим токеном сессии от другого пользователя, выдавая кому-то из вас (или вам обоим) ошибку 400 Bad Request.

В большинстве случаев достаточно рассматривать только ваше приложение в отношении файлов куки, которые относятся к сайту или веб-приложению, выдающему ошибку 400 Bad Request.

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

Это можно сделать разными способами в зависимости от браузера, который вы используете:

  • Google Chrome;
  • Internet Explorer;
  • Microsoft Edge;
  • Mozilla Firefox;
  • Safari.

Если вы получаете ошибку 400 Bad Request при загрузке какого-либо файла, попробуйте корректность работы на меньшем по размеру файле, Это включает в себя и «загрузки» файлов, которые не загружаются с вашего локального компьютера. Даже файлы, отправленные с других компьютеров, считаются «загрузками» с точки зрения веб-сервера, на котором работает ваше приложение.

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

Также приложение может столкнуться с проблемой, связанной с вашей предыдущей сессией, являющейся лишь строкой, которую сервер посылает клиенту, чтобы идентифицировать клиента при будущих запросах. Как и в случае с другими данными, токен сессии (или строка сессии) хранится локально на вашем устройстве в файлах куки и передаётся клиентом на сервер при каждом запросе. Если сервер решает, что токен сессии некорректен или скомпрометирован, вы можете получить ошибку 400 Bad Request.

В большинстве веб-приложений выход повторный вход приводит к перегенерации локального токена сессии.

Если вы используете на сервере распространённые пакеты программ, которые выдают ошибку 400 Bad Request, изучите стабильность и функциональность этих платформ. Наиболее распространённые системы управления контентом, такие как WordPress, Joomla! и Drupal, хорошо протестированы в своих базовых версиях. Но как только вы начинаете изменять используемые ими расширения PHP, очень легко спровоцировать непредвиденные проблемы, которые выльются в ошибку 400 Bad Request.

Если вы обновили систему управления контентом непосредственно перед появлением ошибки 400 Bad Request, рассмотрите возможность отката к предыдущей версии, которая была установлена, как самый быстрый и простой способ убрать ошибку 400 bad request.

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

Но в некоторых случаях CMS не предоставляют возможности отката к предыдущим версиям. Так обычно происходит с популярными платформами, поэтому не бойтесь, если вы не можете найти простой способ вернуться к использованию старой версии той или иной программной платформы.

В зависимости от конкретной CMS, которую использует приложение, имена этих компонентов будут различаться. Но во всех системах они служат одной и той же цели: улучшение возможностей платформы относительно её стандартной функциональности.

При этом имейте в виду, что расширения могут так или иначе получать полный контроль над системой, вносить изменения в код PHP, HTML, CSS, JavaScript или базу данных. Поэтому мудрым решением может быть удаление любых новых расширений, которые были недавно добавлены.

Даже если удалили расширение через панель управления CMS, это не гарантирует, что внесенные им изменения были полностью отменены. Это касается многих расширений WordPress, которым предоставляется полный доступ к базе данных.

Расширение может изменить записи в базе данных, которые «не принадлежат» ему, а созданы и управляются другими расширениями (или даже самой CMS). В подобных случаях модуль может не знать, как откатить назад изменения, внесенные в записи базы данных.

Я лично сталкивался с такими случаями несколько раз. Поэтому лучшим путём будет открыть базу данных и вручную просмотреть таблицы и записи, которые могли быть изменены расширением.

Если вы уверены, что ошибка 400 Bad Request не связана с CMS, вот некоторые дополнительные советы, которые могут помочь найти проблему на стороне сервера.

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

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

Логи сервера относятся к оборудованию, на котором выполняется приложение, и зачастую представляют собой детали о статусе подключённых сервисов или даже о самом сервере. Поищите в интернете “логи [ИМЯ_ПЛАТФОРМЫ]”, если вы используете CMS, или “логи [ЯЗЫК_ПРОГРАММИРОВАНИЯ]” и “логи [ОПЕРАЦИОННАЯ_СИСТЕМА]”, если у вас собственное приложение, чтобы получить подробную информацию по поиску логов.

Если это не помогло, проблема может быть в исходном коде, который выполняется внутри приложения. Попытайтесь диагностировать, откуда может исходить проблема, отлаживая приложение вручную и параллельно просматривая логи приложения и сервера.

Создайте копию всего приложения на локальном устройстве для разработки и пошагово повторите тот сценарий, который приводил к возникновению ошибки 400 Bad Request. А затем просмотрите код приложения в тот момент, когда что-то пойдёт не так.

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

Сергей Бензенкоавтор-переводчик статьи «400 Bad Request Error What It Is and How to Fix It»

Пожалуйста, оставляйте свои мнения по текущей теме материала. За комментарии, подписки, отклики, лайки, дизлайки низкий вам поклон!

Что такое ошибка 400 Bad Request: как ее исправить

0 ∞ 2

Ошибка 400 Bad Request – это код ответа HTTP, который означает, что сервер не смог обработать запрос, отправленный клиентом из-за неверного синтаксиса. Подобные коды ответа HTTP отражают сложные взаимоотношения между клиентом, веб-приложением, сервером, а также зачастую сразу несколькими сторонними веб-сервисами. Из-за этого поиск причины появления ошибки может быть затруднён даже внутри контролируемой среды разработки.

В этой статье мы разберём, что значит ошибка 400 Bad Request (переводится как «Неверный запрос»), и как ее исправить

  • На стороне сервера или на стороне клиента?
  • Начните с тщательного резервного копирования приложения
  • Диагностика ошибки 400 Bad Request
  • Исправление проблем на стороне клиента
    • Проверьте запрошенный URL
    • Очистите соответствующие куки
    • Загрузка файла меньшего размера
    • Выйдите и войдите
  • Отладка на распространённых платформах
    • Откатите последние изменения
    • Удалите новые расширения, модули или плагины
    • Проверьте непреднамеренные изменения в базе данных
  • Поиск проблем на стороне сервера
    • Проверка на неверные заголовки HTTP
    • Просмотрите логи
  • Отладьте код приложения или скриптов

Все коды ответа HTTP из категории 4xx считаются ошибками на стороне клиента. Несмотря на это, появление ошибки 4xx не обязательно означает, что проблема как-то связана с клиентом, под которым понимается веб-браузер или устройство, используемое для доступа к приложению. Зачастую, если вы пытаетесь диагностировать проблему со своим приложением, можно сразу игнорировать большую часть клиентского кода и компонентов, таких как HTML, каскадные таблицы стилей (CSS), клиентский код JavaScript и т.п. Это также применимо не только к сайтам. Многие приложения для смартфонов, которые имеют современный пользовательский интерфейс, представляют собой веб-приложения.

С другой стороны, ошибка 400 Bad Request означает, что запрос, присланный клиентом, был неверным по той или иной причине. Пользовательский клиент может попытаться загрузить слишком большой файл, запрос может быть неверно сформирован, заголовки HTTP запроса могут быть неверными и так далее.

Мы рассмотрим некоторые из этих сценариев (и потенциальные решения) ниже. Но имейте в виду: мы не можем однозначно исключить ни клиент, ни сервер в качестве источника проблемы. В этих случаях сервер является сетевым объектом, генерирующим ошибку 400 Bad Request и возвращающим её как код ответа HTTP клиенту, но возможно именно клиент ответственен за возникновение проблемы.

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

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

Ошибка 400 Bad Request означает, что сервер (удалённый компьютер) не может обработать запрос, отправленный клиентом (браузером), вследствие проблемы, которая трактуется сервером как проблема на стороне клиента.

Существует множество сценариев, в которых ошибка 400 Bad Request может появляться в приложении. Ниже представлены некоторые наиболее вероятные случаи:

  • Клиент случайно (или намеренно) отправляет информацию, перехватываемую маршрутизатором ложных запросов. Некоторые веб-приложения ищут особые заголовки HTTP, чтобы обрабатывать запросы и удостовериться в том, что клиент не предпринимает ничего зловредного. Если ожидаемый заголовок HTTP не найден или неверен, то ошибка 400 Bad Request – возможный результат.
  • Клиент может загружать слишком большой файл. Большинство серверов или приложений имеют лимит на размер загружаемого файла, Это предотвращает засорение канала и других ресурсов сервера. Во многих случаях сервер выдаст ошибку 400 Bad Request, когда файл слишком большой и поэтому запрос не может быть выполнен.
  • Клиент запрашивает неверный URL. Если клиент посылает запрос к неверному URL (неверно составленному), это может привести к возникновению ошибки 400 Bad Request.
  • Клиент использует недействительные или устаревшие куки. Это возможно, так как локальные куки в браузере являются идентификатором сессии. Если токен конкретной сессии совпадает с токеном запроса от другого клиента, то сервер/приложение может интерпретировать это как злонамеренный акт и выдать код ошибки 400 Bad Request.

Устранение ошибки 400 Bad Request (попробуйте позже) лучше начать с исправления на стороне клиента. Вот несколько советов, что следует попробовать в браузере или на устройстве, которые выдают ошибку.

Наиболее частой причиной ошибки 400 Bad Request является банальный ввод некорректного URL. Доменные имена (например, internet-technologies.ru) нечувствительны к регистру, поэтому ссылка, написанная в смешанном регистре, такая как interNET-technologies.RU работает так же, как и нормальная версия в нижнем регистре internet-technologies.ru. Но части URL, которые расположены после доменного имени, чувствительными к регистру. Кроме случаев, когда приложение/сервер специально осуществляет предварительную обработку всех URL и переводит их в нижний регистр перед исполнением запроса.

Важно проверять URL на неподходящие специальные символы, которых в нем не должно быть. Если сервер получает некорректный URL, он выдаст ответ в виде ошибки 400 Bad Request.

Одной из потенциальных причин возникновения ошибки 400 Bad Request являются некорректные или дублирующие локальные куки. Файлы куки в HTTP – это небольшие фрагменты данных, хранящиеся на локальном устройстве, которые используются сайтами и веб-приложениями для «запоминания» конкретного браузера или устройства. Большинство современных веб-приложений использует куки для хранения данных, специфичных для браузера или пользователя, идентифицируя клиента и позволяя делать следующие визиты быстрее и проще.

Но куки, хранящие информацию сессии о вашем аккаунте или устройстве, могут конфликтовать с другим токеном сессии от другого пользователя, выдавая кому-то из вас (или вам обоим) ошибку 400 Bad Request.

В большинстве случаев достаточно рассматривать только ваше приложение в отношении файлов куки, которые относятся к сайту или веб-приложению, выдающему ошибку 400 Bad Request.

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

Это можно сделать разными способами в зависимости от браузера, который вы используете:

  • Google Chrome;
  • Internet Explorer;
  • Microsoft Edge;
  • Mozilla Firefox;
  • Safari.

Если вы получаете ошибку 400 Bad Request при загрузке какого-либо файла, попробуйте корректность работы на меньшем по размеру файле, Это включает в себя и «загрузки» файлов, которые не загружаются с вашего локального компьютера. Даже файлы, отправленные с других компьютеров, считаются «загрузками» с точки зрения веб-сервера, на котором работает ваше приложение.

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

Также приложение может столкнуться с проблемой, связанной с вашей предыдущей сессией, являющейся лишь строкой, которую сервер посылает клиенту, чтобы идентифицировать клиента при будущих запросах. Как и в случае с другими данными, токен сессии (или строка сессии) хранится локально на вашем устройстве в файлах куки и передаётся клиентом на сервер при каждом запросе. Если сервер решает, что токен сессии некорректен или скомпрометирован, вы можете получить ошибку 400 Bad Request.

В большинстве веб-приложений выход повторный вход приводит к перегенерации локального токена сессии.

Если вы используете на сервере распространённые пакеты программ, которые выдают ошибку 400 Bad Request, изучите стабильность и функциональность этих платформ. Наиболее распространённые системы управления контентом, такие как WordPress, Joomla! и Drupal, хорошо протестированы в своих базовых версиях. Но как только вы начинаете изменять используемые ими расширения PHP, очень легко спровоцировать непредвиденные проблемы, которые выльются в ошибку 400 Bad Request.

Если вы обновили систему управления контентом непосредственно перед появлением ошибки 400 Bad Request, рассмотрите возможность отката к предыдущей версии, которая была установлена, как самый быстрый и простой способ убрать ошибку 400 bad request.

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

Но в некоторых случаях CMS не предоставляют возможности отката к предыдущим версиям. Так обычно происходит с популярными платформами, поэтому не бойтесь, если вы не можете найти простой способ вернуться к использованию старой версии той или иной программной платформы.

В зависимости от конкретной CMS, которую использует приложение, имена этих компонентов будут различаться. Но во всех системах они служат одной и той же цели: улучшение возможностей платформы относительно её стандартной функциональности.

При этом имейте в виду, что расширения могут так или иначе получать полный контроль над системой, вносить изменения в код PHP, HTML, CSS, JavaScript или базу данных. Поэтому мудрым решением может быть удаление любых новых расширений, которые были недавно добавлены.

Даже если удалили расширение через панель управления CMS, это не гарантирует, что внесенные им изменения были полностью отменены. Это касается многих расширений WordPress, которым предоставляется полный доступ к базе данных.

Расширение может изменить записи в базе данных, которые «не принадлежат» ему, а созданы и управляются другими расширениями (или даже самой CMS). В подобных случаях модуль может не знать, как откатить назад изменения, внесенные в записи базы данных.

Я лично сталкивался с такими случаями несколько раз. Поэтому лучшим путём будет открыть базу данных и вручную просмотреть таблицы и записи, которые могли быть изменены расширением.

Если вы уверены, что ошибка 400 Bad Request не связана с CMS, вот некоторые дополнительные советы, которые могут помочь найти проблему на стороне сервера.

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

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

Логи сервера относятся к оборудованию, на котором выполняется приложение, и зачастую представляют собой детали о статусе подключённых сервисов или даже о самом сервере. Поищите в интернете “логи [ИМЯ_ПЛАТФОРМЫ]”, если вы используете CMS, или “логи [ЯЗЫК_ПРОГРАММИРОВАНИЯ]” и “логи [ОПЕРАЦИОННАЯ_СИСТЕМА]”, если у вас собственное приложение, чтобы получить подробную информацию по поиску логов.

Если это не помогло, проблема может быть в исходном коде, который выполняется внутри приложения. Попытайтесь диагностировать, откуда может исходить проблема, отлаживая приложение вручную и параллельно просматривая логи приложения и сервера.

Создайте копию всего приложения на локальном устройстве для разработки и пошагово повторите тот сценарий, который приводил к возникновению ошибки 400 Bad Request. А затем просмотрите код приложения в тот момент, когда что-то пойдёт не так.

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

Сергей Бензенкоавтор-переводчик статьи «400 Bad Request Error What It Is and How to Fix It»

Пожалуйста, оставляйте свои мнения по текущей теме материала. За комментарии, подписки, отклики, лайки, дизлайки низкий вам поклон!

Что это такое и как это исправить

Ошибка 400 Bad Request — это код состояния ответа HTTP, указывающий, что сервер не смог обработать запрос, отправленный клиентом, из-за неправильного синтаксиса. Как и в случае с десятками потенциальных кодов ответа HTTP, получение ошибки 400 при доступе к вашему собственному приложению может быть как неприятным, так и сложным для исправления.

Такие коды ответов HTTP представляют собой сложные отношения между клиентом, веб-приложением, веб-сервером и часто несколькими сторонними веб-службами. Как вы понимаете, определить причину ошибки 400 может быть сложно даже в контролируемой среде разработки.

В этой статье мы рассмотрим ошибку 400 Bad Request, выяснив, находится ли основная причина на локальном клиенте или на удаленном сервере. Мы также рассмотрим несколько советов и приемов, которые помогут вам диагностировать и отлаживать собственное приложение, если оно по какой-то причине сообщает об ошибке 400.

Наконец, мы рассмотрим несколько наиболее распространенных систем управления контентом (CMS), которые используются сегодня, и то, как эти системы могут вызвать неожиданную ошибку 400 Bad Request Error.

Серверная или клиентская сторона?

Все коды состояния ответа HTTP, относящиеся к категории 4xx, считаются ответами об ошибках клиента. Эти типы сообщений контрастируют с ошибками категории 5xx, такими как ошибка 504 Gateway Timeout Error, которую мы рассматривали на прошлой неделе, которые считаются ответами на ошибку сервера.

Имея это в виду, появление ошибки 400 не обязательно означает, что проблема связана с клиентом (веб-браузером или устройством).

Часто, если вы пытаетесь диагностировать проблему в своем собственном приложении, вы можете сразу же игнорировать большую часть клиентского кода и компонентов. Это может включать HTML, каскадные таблицы стилей (CSS), клиентский JavaScript и т. д. это не относится только на веб-сайты. Многие приложения для смартфонов, использующие современный пользовательский интерфейс, за кулисами работают на основе обычного веб-приложения.

С другой стороны, ошибка 400 Bad Request указывает на то, что запрос, отправленный клиентом, по той или иной причине недействителен. Вполне возможно, что проблема на стороне клиента. Возможно, ваш клиент пытается отправить слишком большой файл, запрос может быть каким-то образом искажен, HTTP-заголовки запроса могут быть недействительными и т. д. Ниже мы рассмотрим некоторые из этих сценариев (и возможные решения).

Имейте в виду, что, хотя ошибка 400 считается ответом на ошибку клиента, по сути это не означает, что мы можем исключить клиент или сервер как корень проблемы. В этих сценариях сервер по-прежнему является сетевым объектом, который создает ошибку 400 Bad Request Error и возвращает ее клиенту в виде кода ответа HTTP. Также может быть, что клиент каким-то образом вызывает проблему.

Начните с тщательного резервного копирования приложений

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

Диагностика ошибки 400 Bad Request

Ошибка 400 Bad Request указывает на то, что сервер (удаленный компьютер) не может (или отказывается) обработать запрос, отправленный клиентом (веб-браузером). Существует несколько сценариев, при которых в приложении может появиться ошибка 400 Bad Request Error, но ниже приведены наиболее вероятные причины:

  • Клиент может отправлять ложную информацию о маршрутизации запроса. Некоторые веб-приложения/веб-серверы ищут настраиваемые заголовки HTTP для обработки запросов и проверки того, что клиент не предпринимает никаких вредоносных действий. Если ожидаемый пользовательский HTTP-заголовок отсутствует или недействителен, вероятным результатом является ошибка 400.
  • Возможно, клиент загружает слишком большой файл. Большинство веб-серверов или приложений имеют явное ограничение размера файла, которое предотвращает загрузку слишком больших файлов. Это необходимо для предотвращения засорения полосы пропускания.
  • Клиент обращается к недопустимому URL-адресу. Если клиент отправляет запрос на недопустимый URL-адрес, особенно тот, который искажен из-за неправильных символов, это может привести к ошибке http 400.
  • Клиент использует недействительный или просроченный локальный файл cookie. Опять же, это может быть злонамеренным или случайным. Возможно, локальный файл cookie в веб-браузере идентифицирует вас с помощью сеансового файла cookie. Если этот конкретный токен сеанса совпадает с токеном сеанса из
    еще один запрос
    от другого клиента, сервер/приложение может воспринять это как злонамеренное действие и выдать код ошибки 400 Bad Request Error.

Устранение неполадок на стороне клиента

Поскольку ошибка 400 Bad Request Error является кодом ответа на ошибку клиента, лучше всего начать с устранения любых потенциальных проблем на стороне клиента, которые могут вызывать эту ошибку.

Вот несколько советов, которые можно попробовать в браузере или на устройстве, которые выдают ошибку http 400.

Проверьте запрошенный URL-адрес

Как уже упоминалось, наиболее распространенной причиной ошибки 400 Bad Request является просто ввод неверного URL-адреса.

Доменные имена (например, airbrake.io) нечувствительны к регистру. Это означает, что эта смешанная ссылка на AirBrAKe.IO работает так же хорошо, как и обычная версия airbrake.io со строчными буквами.

Однако части пути, запроса или фрагмента, которые появляются после имени домена, довольно часто чувствительны к регистру. Исключение составляют случаи, когда конфигурация приложения/сервера явно предназначена для предварительной обработки всех URL-адресов в нижнем регистре перед выполнением.

Проверьте URL-адрес на наличие неподходящих специальных символов, которые не принадлежат. Если сервер получил неверный URL-адрес, он, скорее всего, выдаст ответ 400 Bad Request Error.

Очистить соответствующие файлы cookie

Как обсуждалось выше, одной из возможных причин ошибки 400 является недопустимый или повторяющийся локальный файл cookie. Файлы cookie HTTP — это крошечные фрагменты данных, хранящиеся на вашем локальном устройстве, которые используются веб-сайтами и приложениями для «запоминания» информации о конкретном браузере и/или устройстве.

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

Однако файл cookie, в котором хранится информация о сеансе для вашей конкретной учетной записи пользователя или устройства, может конфликтовать с другим токеном сеанса от другого пользователя, что приводит к ошибке 400 Bad Request 400 для одного из вас или для вас обоих.

В большинстве случаев вам нужно заботиться только о файлах cookie, которые имеют отношение к веб-сайту или приложению, вызывающему проблему.

Файлы cookie хранятся на основе доменного имени веб-приложения, поэтому вы можете удалить только те файлы cookie, которые соответствуют домену веб-сайта (например, airbrake.io). Это позволит вам сохранить все остальные файлы cookie нетронутыми. Однако, если вы не знакомы с удалением определенных файлов cookie вручную, гораздо проще и безопаснее удалить

все файлы cookie сразу.

Очистка файлов cookie может выполняться различными способами в зависимости от используемого вами браузера. Вот список инструкций по очистке файлов cookie в зависимости от браузера: 

  • Гугл Хром
  • Internet Explorer
  • Microsoft Edge
  • Мозилла Фаерфокс
  • Сафари

Загрузить файл меньшего размера

Если при загрузке файла возникает ошибка 400, попробуйте протестировать другой файл гораздо меньшего размера, чтобы проверить, устраняет ли это ошибку. Это включает в себя «загрузки» файлов, которые на самом деле не поступают с вашего локального компьютера. Даже файлы, отправленные с других компьютеров, считаются «загрузками» с точки зрения веб-сервера, на котором запущено ваше приложение.

Выйдите из системы и войдите в систему

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

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

Перед проверкой серверов отладьте CMS

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

Наиболее распространенные системы управления контентом (CMS), такие как WordPress, Joomla! и Drupal, обычно хорошо протестированы из коробки. К сожалению, как только вы начнете вносить изменения в базовые расширения или код PHP, слишком легко вызвать непредвиденную проблему, которая приведет к ошибке 400 Bad Request.

Откат последних обновлений

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

Точно так же любые расширения или модули, которые вы могли недавно обновить, также могут вызывать проблемы на стороне сервера. Попробуйте откатить обновления до предыдущей версии. Чтобы получить помощь в решении этой задачи, просто введите в Google «понижение версии [PLATFORM_NAME]» и следуйте инструкциям.

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

Удаление новых расширений, модулей или подключаемых модулей

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

Но имейте в виду: расширения могут получить полный контроль над системой и вносить практически любые изменения, будь то код PHP, HTML, CSS, JavaScript или база данных. Таким образом, разумно удалить все новые расширения, которые могли быть недавно добавлены.

Проверка на наличие непредвиденных изменений в базе данных

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

Существуют сценарии, в которых расширение может изменять записи базы данных, которые не «принадлежат» самому расширению, а вместо этого создаются и управляются другими расширениями (или даже самой базовой CMS). В этих сценариях расширение может не знать, как отменить изменения в записях базы данных, поэтому оно будет игнорировать такие вещи во время удаления.

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

Устранение неполадок на стороне сервера

Если вы не используете приложение CMS или уверены, что ошибка 400 Bad Request не связана с этим — пришло время проверить наличие проблем на стороне сервера.

Проверка на недопустимые заголовки HTTP

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

Просмотр журналов

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

Журналы сервера относятся к фактическому оборудованию, на котором выполняется приложение. Они часто содержат сведения о работоспособности и состоянии всех подключенных служб или только самого сервера. Google «logs [PLATFORM_NAME]», если вы используете CMS, или «logs [PROGRAMMING_LANGUAGE]» и «logs [OPERATING_SYSTEM]», если вы используете пользовательское приложение, чтобы получить больше информации о поиске журналов, о которых идет речь.

Отладка кода или сценариев приложения

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

В идеале вы должны сделать копию всего приложения на локальном компьютере для разработки и отладить его шаг за шагом, чтобы выяснить, что именно вызвало ошибку 400 Bad Request.

Или вы можете найти ошибку в считанные минуты, используя мониторинг ошибок Airbrake.

Программное обеспечение Airbrake для мониторинга ошибок обеспечивает мониторинг ошибок в режиме реального времени и автоматические отчеты об исключениях для всех ваших проектов разработки.

Современная веб-панель Airbrake гарантирует, что вы будете получать круглосуточные обновления состояния вашего приложения и частоты ошибок.

Ознакомьтесь с программным обеспечением Airbrake для мониторинга ошибок сегодня и убедитесь сами, почему так много лучших в мире команд инженеров используют Airbrake, чтобы революционизировать свои методы обработки исключений!

Примечание. Мы опубликовали этот пост в ноябре 2021 г. и недавно обновили его в мае 2022 г. Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья

Когда HTTP-запрос, требующий проверки подлинности Kerberos, отправляется на веб-сайт, размещенный в информационных службах Интернета (IIS) и настроенный на использование проверки подлинности Kerberos, заголовок HTTP-запроса будет очень длинным. Эта статья поможет вам обойти ошибку HTTP 400, которая возникает, когда заголовок HTTP-запроса слишком длинный.

Исходная версия продукта:   Windows Server 2016
Исходный номер базы знаний:   2020943

Симптомы

HTTP-запрос, требующий проверки подлинности Kerberos, отправляется из браузера на веб-сайт, размещенный в IIS. Веб-сайт настроен на использование проверки подлинности Kerberos. Однако вместо получения ожидаемой веб-страницы появляется сообщение об ошибке, подобное следующему:

.

HTTP 400 — неверный запрос (слишком длинный заголовок запроса)

Этот ответ может быть сгенерирован любым HTTP-запросом, включающим удаленное управление Windows (WinRM).

Причина

Эта проблема может возникнуть, если пользователь является членом многих групп пользователей Active Directory.

HTTP-запрос к серверу содержит токен Kerberos в заголовке WWW-Authenticate . Размер заголовка увеличивается вместе с количеством групп пользователей. Если заголовок HTTP или размер пакета превысят ограничения, настроенные на сервере, сервер может отклонить запрос и отправить сообщение об ошибке в качестве ответа.

Обходной путь 1: Уменьшите количество групп Active Directory

Уменьшите количество групп Active Directory, членом которых является пользователь.

Обходной путь 2: Установите записи реестра MaxFieldLength и MaxRequestBytes

Увеличьте параметры для записей реестра MaxFieldLength и MaxRequestBytes на сервере, чтобы заголовки запросов пользователя не превышали эти значения. Чтобы определить соответствующие настройки, используйте следующие расчеты:

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

  2. Установите значение MaxFieldLength и MaxRequestBytes на сервере равным 4/3 * T байт, где T — размер токена пользователя в байтах.

    HTTP кодирует токен Kerberos, используя кодировку base64.

    Примечание

    Это заменяет каждые три байта в маркере четырьмя байтами в кодировке base64. Изменения, внесенные в реестр, не вступят в силу, пока вы не перезапустите службу HTTP. Кроме того, может потребоваться перезапустить любые связанные службы, например службы IIS.

В зависимости от среды вашего приложения вы также можете обойти эту проблему, настроив веб-сайт для использования Windows NT LAN Manager (NTLM) вместо Kerberos. В некоторых средах приложений для делегирования требуется использование проверки подлинности Kerberos. Мы считаем, что аутентификация Kerberos более безопасна, чем NTLM. И мы рекомендуем вам не отключать аутентификацию Kerberos, пока вы не рассмотрите разветвления безопасности и делегирования.

По умолчанию нет MaxFieldLength запись реестра. Эта запись определяет максимальный размер каждого заголовка HTTP-запроса. Запись реестра MaxRequestBytes указывает верхний предел общего размера строки запроса и заголовков. Обычно эта запись реестра настраивается вместе с записью реестра MaxRequestBytes . Если значение MaxRequestBytes ниже значения MaxFieldLength , значение MaxFieldLength корректируется. В больших средах Active Directory пользователи могут столкнуться со сбоями при входе в систему, если значения для обеих этих записей не установлены на достаточно высокое значение.

Для IIS 6.0 и более поздних версий ключи реестра MaxFieldLength и MaxRequestBytes расположены в следующем подразделе:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Установите значения ключей, как показано на в следующей таблице:

Имя Тип значения Значение данных
Максимальная длина поля двойное слово (4/3 * Т байт) + 200
Максрекуестбайт двойное слово (4/3 * Т байт) + 200

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