Что означает HTTP статус 405 Method Not Allowed?

Ответ

Статус 405 Method Not Allowed указывает, что HTTP-метод, использованный в запросе (например, POST, DELETE), известен серверу, но не разрешён для целевого ресурса.

Согласно спецификации, ответ с кодом 405 должен содержать заголовок Allow, перечисляющий допустимые методы для данного URL.

Пример ответа сервера:

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

{
  "error": "DELETE method is not supported for this endpoint."
}

Типичные причины:

  • Попытка выполнить DELETE для ресурса, доступного только для чтения (GET, HEAD).
  • Вызов PUT на коллекцию, где разрешено только создание через POST.
  • Ошибка в конфигурации маршрутизации на сервере (например, в REST API framework).

Действия при получении 405:

  1. Проверить документацию API для нужного эндпоинта.
  2. Убедиться в правильности HTTP-метода в запросе.
  3. Изучить заголовок Allow в ответе, чтобы узнать доступные методы.

Ответ 18+ 🔞

А, слушай, вот эта ошибка, 405, она такая... ну, знаешь, как будто ты пытаешься впихнуть невпихуемое. Типа, пришёл ты в библиотеку и пытаешься книгу не прочитать, а, блядь, поджечь её прямо на полке. Тебе говорят: «Мужик, тут можно только читать, а ты что делаешь?». Вот это оно и есть.

405 Method Not Allowed — это когда серверу в принципе понятно, что ты от него хочешь (метод-то он знает, типа DELETE или PUT), но для вот этого конкретного места, куда ты стучишься, этот способ — полный пиздец и недопустим.

И тут, внимание, важный момент, ёпта! По всем правилам хорошего тона, сервер, который шлёт тебе 405, обязан приложить к ответу заголовок Allow. Это такой намёк, мол, «чувак, не тупи, вот что тут можно делать». Без этого заголовка — он сам мудак и не до конца следует протоколу.

Вот как выглядит культурный отлуп:

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

{
  "error": "DELETE method is not supported for this endpoint."
}

Перевод: «Ты пытаешься удалить (DELETE) то, что можно только смотреть (GET) или добавлять (POST). Иди нахуй со своим делетом».

А теперь, откуда эта хуйня обычно вылезает:

  • Ты ломишься с DELETE или PUT туда, где ресурс только для чтения. Представь, пытаешься отредактировать или стереть табличку с законом на стене. Не выйдет, блядь.
  • Хочешь обновить (PUT) целую коллекцию, а тебе разрешают только создать новую запись через POST. Ну, логично, нельзя же всю базу одним махом переписать, ты чё, охуел?
  • И, конечно, классика — косяк в настройках сервера. Разработчик накосячил с роутингом в своём REST API, и теперь твой легальный запрос летит в пизду.

Что делать, если тебя накрыло 405-м?

  1. Первым делом — в документацию, блядь! Посмотреть, что вообще можно делать с этим эндпоинтом.
  2. Перепроверить, не обосрался ли ты с методом в самом запросе. Может, хотел GET, а отправил POST по привычке.
  3. Усердно вглядеться в заголовок Allow в ответе. Там будет список того, что можно. Это твой план спасения. Если этого заголовка нет — ну, что ж, сервер тот ещё мудак, придётся гадать.