Что такое ошибка HTTP 405 (Method Not Allowed Error) и как ее исправить

Ответ с кодом 405 Method Not Allowed — это ошибка, которая указывает на запрет метода, упоминаемого в строке запроса. В качестве таких методов чаще всего выступают GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS. Например, GET — метод для чтения данных с сайта, который может применяться для доступа к указанной странице, а HEAD запрашивает заголовки, идентичные тем, что возвращаются, если указанный ресурс будет запрошен с помощью HTTP-метода GET.

Простыми словами, HTTP 405 Method Not Allowed — метод не разрешен для ресурса, идентифицированного в URI запроса.

Что означает код ошибки 405

Сервер получил конкретный запрос — с заданным HTTP-методом, но есть проблема: он не в состоянии его распознать. Соответственно, пользователь не увидит контент на странице, ведь она просто не загрузится. 

405-й ответ означает, что метод запроса известен серверной части, но был отключен и поэтому не может быть задействован. И здесь важно запомнить: два обязательных метода GET и HEAD никогда не должны быть деактивированы и, соответственно, не должны возвращать 405-й код.

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

Для устранения этой есть пара способов. 

  • Пользователю бывает достаточно перезагрузить страницу. 
  • Вебмастеру и разработчику требуется изучить конфигурации сервера или конкретного приложения, чтобы определить причину ограничения на использование этого метода. 

Отслеживание HTTP-запросов во время сбоев помогает выявить конкретную точку, на которой «срабатывает» условная блокировка.

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

Причины

Несоответствие метода запроса — наиболее распространенная причина. Клиент отправляет запрос, используя метод, не поддерживаемый для этого эндпоинта (URL на сервере). Но теперь разберем конкретные источники и причины.

Некорректная настройка Cross-Origin Resource Sharing

Ошибки связанные с некорректной настройкой CORS (и его политиками) могут вызвать 405-й ответ. 

Пример: вы пытаетесь разработать фронтенд-приложение с использованием Angular. После добавления заголовка авторизации в HTTP POST и GET получаете 405-й ответ. При этом от серверной части разрешение вроде бы есть.

Решение: проблема в примере не связана с CORS прямо. Но косвенно связана. Смотрите: бэкэнд — это GraphQL, который позволяет выполнять GET- и POST-запросы. Если мы добавляем дополнительные заголовки на стороне клиента, браузер проверяет наличие CORS через preflight-запрос OPTIONS к URL, (на нем кстати и расположен сервер GraphQL). Вот и получаем 405 Method Not Allowed, который на деле отдается сервером GraphQL, а не Express’ом или браузером. 

«Предполетный запрос» (preflight request) может возвращать 405-й код состояния из-за некорректных параметров CORS.

Пользовательские ограничения

В некоторых фреймворках (привет Django с Ruby) есть декораторы: они могут ограничивать методы для определенных действий контроллера. Неправильная настройка здесь может легко привести к появлению 405-х.

Элементы управления доступом к веб-серверу 

Правила в htaccess могут блокировать доступ определенных методов к определенным ресурсам, если они не настроены коррект: допустим, у вас сайт на WP. И куча плагинов. Весело. Но плагины, добавляющие ограничения доступа в htaccess, также могут вызывать 405-й ответ.

Проблемы с балансировщиком нагрузки 

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

Пример того, как выглядит Method Not Allowed

В примере ниже используемый метод запроса (PUT) запрещен:

"HTTP/1.1 405 Method Not Allowed
Allow: GET, POST
Content-Type: application/json

{
"error": "Method not allowed"
}
"

Разрешенными методами запроса являются GET и POST

Как исправить ошибку 405 Метод не разрешен

Для вебмастера и разработчика

Если вы получаете сообщение об ошибке 405, первым делом, смотрите три момента:

  • Метод HTTP, который вы используете.
  • Ресурс, к которому вы пытаетесь получить доступ.
  • Конфигурация сервера.

Если после проверки этих элементов вы по-прежнему получаете сообщение об ошибке 405, идите в сторону сервера.

Проверьте метод запроса

Сначала убедитесь в том, что метод запроса, который отправляется, соответствует тому, который поддерживает эндпоинт. Часто ошибка вызвана простейшим GET вместо POST или наоборот. Полезно будет почитать документацию API, особенно часть про методы.

Просмотрите настройки CORS

Если это ошибка 405, связанная с CORS — механизмами Cross-Origin Resource Sharing. Здесь, первым делом, смотрите сервер API. На нем CORS также должен быть включен и правильно настроен.

Для добавления необходимых заголовков, см. Access-Control-Allow-Methods для preflight-запросов.

Проверьте декораторы 

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

Подтвердите правила 

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

Повторите запрос альтернативными методами

Попробуйте использовать иные HTTP-методы. Прямо подряд: POST, GET, PUT. Смотрите, работает ли какой-либо из них вместо текущего. Такой метод поможет сузить область, в которой существует проблема с конфигурацией.

Включите ведение журналов отладки

Активный журнал на шлюзах API, прокси-серверах, веб-серверах — ваш друг. Так вы точно установите место, где генерируется 405-й ответ в течение всего жизненного цикла запроса.

Обновите устаревшие исправления безопасности 

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

Сбросьте конфигурацию до значения по умолчанию

Для быстрого тестирования нужно сбросить конфигурацию веб-сервера (не забудьте про .htaccess).

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

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

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

Должна быть открыта пересылка всех необходимых HTTP-методов. 

Обратитесь в службу поддержки хостинга

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

Коротко о главном

  • Ошибка HTTP 405 — код состояния HTTP, который означает, что определенный метод запроса не разрешен для запрашиваемой страницы или ресурса.
  • HTTP 405 Method Not Allowed является ошибкой на стороне клиента, то есть тем, что тот сделал неверно — например, использовал неправильный HTTP-метод.
  • Если вы — разработчик, то сможете предотвратить ошибки 405, проверяя HTTP-методы для используемых ресурсов. 

Оценить статью
Нет ответов

Комментарии

Написать комментарий
Популярные статьи автора
Узнайте стоимость продвижения сейчас
Выберите удобный способ связи:
Выберите удобный способ связи:
Введите Ваш номер телефона:
Введите адрес Вашего сайта:
Введите Ваше имя:
Нажимая кнопку «Получить предложение» вы соглашаетесь с Политикой конфиденциальности.
Введите Ваш Email:
Введите адрес Вашего сайта:
Введите Ваше имя:
Нажимая кнопку «Получить предложение» вы соглашаетесь с Политикой конфиденциальности.
Оперативно отвечаем в рабочее время: с 10:00 до 19:00
Оперативно отвечаем в рабочее время: с 10:00 до 19:00
Вы уже проголосовали
Возьмем ТОП вместе?
Здравствуйте, меня зовут
,
я представляю компанию
.
Со мной можно связаться по телефону
Со мной можно связаться по тел.
,
или по email
ник в телеграм
Спасибо!
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Цена лидов в различных нишах
Тематика Стоимость лида (Москва/Россия)
Отдых 500
Мебель 350
Оборудование 500
Бансковские услуги 500
Безопасность 500
Организация мероприятий, концерты, праздники 500
Недвижимость 500
Строительство и отделка 500
Грузоперевозки 500
Доставка еды 350
Юридические услуги 500
Бухгалтерские услуги 500
Пластиковые окна 500
Детские товары 350
Автозапчасти 350
Образование 500
Возьмем ТОП вместе?
Здравствуйте, меня зовут
,
У меня есть сайт
.
Со мной можно связаться по телефону
Со мной можно связаться по тел.
,
или по email
ник в телеграм
Спасибо!
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Оставить заявку сейчас
Ваше имя*
Введите адрес Вашего сайта:*
Введите Ваш номер телефона:*
Введите Ваш e-mail:*
Введите Ваш ник в телеграм:
Выберите интересующую услугу *
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Подпишитесь на рассылку
Не пропустите самое интересное из мира SEO и Digital. Только актуальные и самые крутые статьи.
Заявка успешно отправлена!
Наши сотрудники уже приступили к анализу Вашего сайта. Наш менеджер свяжется с вами в течение дня, спасибо!