Ошибка 405 Method Not Allowed: причины и диагностика
Что означает HTTP 405 Method Not Allowed, как проверить Allow, маршрутизацию, CORS, reverse proxy и несоответствие HTTP-метода контракту endpoint.

HTTP 405 Method Not Allowed означает, что сервер распознал HTTP-метод, но не разрешает использовать его для конкретного ресурса. Например, endpoint существует и принимает GET, но запрос POST к тому же URL запрещён.
Это отличается от 404 Not Found и 501 Not Implemented. При 405 сервер понимает метод как таковой и знает целевой ресурс, однако сочетание «метод + ресурс» не поддерживается. RFC 9110 требует, чтобы origin server включал в 405 заголовок Allow со списком поддерживаемых методов.
Что означает HTTP 405
POST /reports/42
↓
маршрут существует
↓
POST для него не разрешён
↓
405 Method Not Allowed
Allow: GET, HEAD

Главный вопрос диагностики: какой метод фактически отправляет клиент и какие методы разрешает именно этот URL.
Чем 405 отличается от соседних кодов
| Код | Практический смысл |
|---|---|
404 Not Found | ресурс не найден или сервер не раскрывает его существование |
405 Method Not Allowed | метод известен, но не поддерживается целевым ресурсом |
501 Not Implemented | сервер не распознаёт или не реализует метод как функциональность |
Основные причины 405
Клиент отправляет неправильный метод
Например:
контракт: PUT /v1/users/42
клиент: POST /v1/users/42
URL правильный, но router не имеет POST-handler.
Frontend и backend разошлись после релиза
Frontend уже вызывает новый метод, а backend ещё не обновлён или rollout прошёл не на всех инстансах. При балансировке возможно чередование успеха и 405.
Reverse proxy ограничивает методы
Запрос может быть отклонён до приложения. Если application log не видит запрос, а proxy log фиксирует 405, искать нужно раньше приложения.
URL попал не в тот route/location
Trailing slash, rewrite или порядок location способны отправить API-запрос в статический обработчик, где GET работает, а POST получает 405.
CORS preflight получает 405
Браузер перед основным запросом может отправить OPTIONS. Если 405 получает именно preflight, нужно исправлять обработку OPTIONS/CORS, а не бизнес-метод вслепую.
Шаг 1. Зафиксируйте точный URL и метод
curl -i https://example.com/api/items
Проблемный метод:
curl -i -X POST https://example.com/api/items
Смотрите на status, Allow, response body, proxy/CDN headers и request ID.
Важно: -X меняет слово метода, но не формирует автоматически правильное тело и поведение запроса. Для POST с данными используйте подходящие options --data/--data-binary.
Шаг 2. Проверьте Allow
Корректный ответ может выглядеть так:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS
Если Allow отсутствует в ответе origin server, проверьте реализацию: RFC 9110 требует этот заголовок для 405.
Шаг 3. Постройте матрицу «URL × метод»
Для безопасного тестового endpoint:
for method in GET POST PUT PATCH DELETE OPTIONS; do
code=$(curl -sS -o /dev/null -w '%{http_code}' -X "$method" https://example.com/api/items)
printf '%-7s %s\n' "$method" "$code"
done

Не запускайте DELETE, POST, PUT или PATCH против production-ресурса, если они способны изменить реальные данные.
Шаг 4. Сверьте route table приложения
Проверьте фактический контракт:
GET /v1/items
POST /v1/items
GET /v1/items/{id}
PATCH /v1/items/{id}
DELETE /v1/items/{id}
Частая ошибка — отправить POST /v1/items/42, когда нужен PATCH /v1/items/42.
Шаг 5. Сравните public proxy и upstream
Если это безопасно и инфраструктура позволяет:
public URL → 405
upstream → 200/204
указывает на proxy/rewrite/method policy. Если оба дают 405, проверьте приложение или контракт.
Шаг 6. Проверьте логи
Для расследования нужны method, URL, timestamp, response status, upstream status и request ID. Строка «405» без метода почти бесполезна.
405 и REST API
Пример:
curl -i \
-X PATCH \
-H 'Content-Type: application/json' \
--data '{"name":"Новое имя"}' \
https://api.example.com/v1/users/42
Если endpoint поддерживает только PUT, он может вернуть 405 с Allow.
Связанный материал: как мониторить API endpoint.
Когда 405 появился после deployment
Проверьте:
- версии frontend/backend;
- route registration;
- proxy/ingress config;
- mixed-version replicas;
- redirect/rewrite;
OPTIONSpreflight.
Если ошибка плавающая, проверяйте backend-инстансы по отдельности.
Как проверить восстановление
Нужно подтвердить и позитивный, и негативный сценарий:
GET → 200
POST → 405 + Allow: GET, HEAD

Если после «исправления» все методы возвращают 200, ограничение могло быть снято слишком широко.
Автоматический контроль
Монитор должен использовать реальный безопасный метод критичного endpoint. Проверка только GET / не обнаружит поломку POST /checkout.
UpWatch можно использовать для регулярного контроля HTTP/API endpoint, если запрос безопасен и ожидаемый результат определён заранее.
Типичные ошибки
- считать 405 отсутствием URL;
- игнорировать
Allow; - менять backend, не проверив фактический method клиента;
- тестировать destructive методы на production;
- разрешать все методы глобально;
- путать 405 основного запроса и 405 CORS preflight.
Практический чек-лист
- Зафиксировать URL и method.
- Подтвердить 405 через curl.
- Проверить
Allow. - Сверить API contract.
- Определить слой, вернувший ответ.
- Проверить route table.
- Проверить proxy/rewrite.
- Для браузера проверить
OPTIONS. - Не выполнять опасные методы на реальных данных.
- Проверить разрешённый и запрещённый сценарии после исправления.
Источники и спецификации
Частые вопросы
Что означает 405 Method Not Allowed?
Сервер распознал HTTP-метод, но не разрешает его для конкретного целевого ресурса.
Чем 405 отличается от 404?
404 означает, что ресурс не найден или его существование не раскрывается. При 405 ресурс известен, но выбранный метод для него не поддерживается.
Должен ли 405 содержать Allow?
Да. RFC 9110 требует, чтобы origin server включал Allow со списком методов, поддерживаемых целевым ресурсом.
Может ли CORS приводить к 405?
Browser preflight OPTIONS может получить 405, если сервер не обрабатывает этот метод. Нужно отличать отказ preflight от 405 основного запроса.
Можно ли исправить 405, разрешив все методы?
Нет как универсальное решение. Нужно разрешить только методы, предусмотренные контрактом и политикой безопасности ресурса.
Связанные материалы

Ошибка 404 Not Found: причины появления и правильная обработка
Что означает HTTP 404, как найти битые URL, отличить удалённую страницу от ошибки маршрутизации и правильно выбрать между 404, 410 и постоянным перенаправлением.

Ошибка 400 Bad Request: почему сервер отклоняет запрос
Что означает HTTP 400 Bad Request, какие ошибки запроса вызывают этот код и как по шагам проверить URL, заголовки, cookies, JSON, proxy и логи сервера.

Как мониторить API endpoint
Как выбрать API endpoint для мониторинга и задать критерии успеха: HTTP-код, timeout, JSON, авторизация, безопасный запрос, частота проверки и диагностика сбоев.

Как проверить API через curl
Практическое руководство по проверке API через curl: GET, POST, JSON, headers, Bearer Token, Basic Auth, HTTP-код, redirect, timeout, TLS и время ответа.