Код 405 Method Not Allowed означает: сервер принял запрос, нашел ресурс по указанному URL, но отклонил его — использованный HTTP-метод не разрешен для этого адреса. Это может проявляться в браузере при отправке формы или переходе по ссылке, в ответе API (request failed with status code 405) или в логах веб-сервера (405 not allowed nginx).
В этой статье разберем все типичные причины возникновения 405 и конкретные шаги для исправления — отдельно для пользователя, владельца сайта и разработчика.
Почему сайт выдает ошибку 405: основные причины
Ошибка 405 может возникать по разным причинам — от неверного метода в запросе до жестких настроек безопасности. Вот основные:
- Неверный HTTP-метод в запросе. Клиент отправляет GET вместо POST, POST вместо GET, PUT вместо PATCH и так далее. Особенно часто это встречается при работе с формами (браузер отправляет POST, а сервер ожидает GET) или с API (разработчик перепутал метод в документации).
- Сервер может блокировать определенные HTTP-методы. В Nginx методы ограничивают директивой limit_except, в Apache — Limit и LimitExcept. Но важно различать код: если метод блокируется запретом доступа (deny all), сервер вернёт 403, а не 405. Именно 405 возникает, когда метод не поддерживается для ресурса по-другому — например, при POST к статическому файлу или при явном правиле return 405. В Apache аналогичную роль играют директивы Limit и LimitExcept: если нужный метод не входит в разрешенный список, сервер возвращает 405.
- Приложение не реализовало обработчик. Роут (URL) существует, но в коде нет обработчика для того HTTP-метода, который использует клиент. Например, есть GET /api/user, но нет POST /api/user. Запрос доходит до приложения, но фреймворк не в состоянии обработать его и возвращает 405.
- Фильтр методов CDN или прокси. Cloudflare, Sucuri и другие сервисы могут блокировать нестандартные методы — PUT, DELETE, PATCH — на уровне правил WAF или настроек безопасности. Если метод заблокирован, прокси вернёт ошибку, даже не передав запрос на ваш сервер.
- Плагины безопасности WordPress. Плагины вроде Wordfence, iThemes Security, All In One WP Security блокируют запросы с нестандартными методами, считая их признаком атаки.
- Nginx и статические файлы. Nginx не поддерживает POST-запросы к статическим файлам (.html, .jpg, .css). Если POST отправляется на такой файл, Nginx сразу возвращает 405, не передавая запрос дальше.
Как убрать ошибку 405 в браузере: шаги для пользователя
В большинстве случаев пользователь не может самостоятельно устранить ошибку 405 — проблема на стороне сайта. Однако есть несколько простых действий, которые стоит попробовать:
- Обновить страницу (F5 или Ctrl+F5) — возможно, сервер временно выдает ошибку.
- Очистить кэш браузера и cookies — иногда проблема связана с сохраненными данными.
- Открыть страницу в режиме инкогнито — это исключает влияние расширений и сохраненных сессий.
- Попробовать другой браузер, чтобы убедиться, что проблема не в конкретном браузере.
Если ни один из способов не помог, ошибка точно на стороне сервера. Пользователю остается сообщить владельцу сайта о проблеме.
Отдельная ситуация — ошибка 405 в ОФД (операторе фискальных данных). Она возникает, когда клиентское ПО отправляет запрос неверным HTTP-методом на сервер ОФД. Пользователь не может исправить это самостоятельно: нужно обновить ПО кассы или обратиться в техподдержку ОФД.
Часто 405 — не единственная техническая проблема: страницы могут отдавать неверные коды ответа и незаметно выпадать из индекса. ПО Shadow обходит сайт, находит страницы с проблемными ответами и ошибками индексации и даёт данные для их устранения.
Как исправить ошибку 405 в Nginx
Если ошибка 405 появляется под управлением Nginx, причины чаще всего связаны с настройками location или обработкой статики.
Проблема 1: POST на статический файл.
Nginx по умолчанию не обрабатывает POST-запросы к статическим файлам и возвращает 405. Решение: убедиться, что запрос идет к динамическому обработчику (php-fpm, proxy_pass, uwsgi), а не напрямую к файлу. Если статический файл должен принимать POST — это архитектурная ошибка, нужно перенаправить запрос на обработчик.
Проблема 2: директива limit_except.
В конфиге Nginx может быть блок location с директивой limit_except, которая ограничивает разрешенные методы. Например:
| nginx location /api/ { limit_except GET HEAD { deny all; } } |
В этом примере разрешены только GET и HEAD, остальные методы блокируются. Но учтите: из-за deny all такой блок возвращает 403 Forbidden, а не 405. Если сервер отдаёт именно 405 — метод отклоняется иначе (POST к статике или явное return 405). Решение: добавить нужные методы в исключение limit_except, а если стоит явный return 405 — скорректировать это правило.
Проблема 3: proxy_pass и upstream.
Если Nginx проксирует запросы на бэкенд (например, на приложение на Python, Node.js или на другой сервер), убедитесь, что:
- бэкенд действительно принимает нужный метод;
- Nginx не переписывает метод (директивы proxy_method);
- в настройках прокси нет блокировок по методам.
После любых изменений конфига обязательно проверить синтаксис командой nginx -t и перезагрузить сервер: nginx -s reload или systemctl reload nginx.
Как исправить 405 Method Not Allowed в API и коде приложения
Если ошибка 405 появляется в API или коде приложения, нужна комплексная диагностика. Ниже — пошаговая инструкция.
Шаг 1: Проверить заголовок Allow. Сервер с ошибкой 405 обязан вернуть заголовок Allow со списком методов, разрешенных для данного URL. Посмотреть его можно в инструментах разработчика (вкладка Network → ответ → заголовки) или через команду:
| bash curl -I https://example.com/api/endpoint Если Allow: GET, HEAD — а вы отправляете POST, проблема в выборе метода. |
Шаг 2: Убедиться, что клиент использует нужный метод. Сверьте метод с документацией API или с роутами приложения. Возможно, эндпоинт ожидает GET, а клиент шлет POST, или наоборот.
Шаг 3: Добавить обработчик в коде. Если сервер обратно выдает 405, хотя код правильный, — значит в приложении не зарегистрирован обработчик для этого метода. Во фреймворках (Django, Laravel, Express, Spring) следует явно указать, какие методы поддерживает роут. Например, в Express:
| javascript app.post(‘/api/user’, handler); // POST разрешен app.get(‘/api/user’, handler); // GET разрешен Если отсутствует app.post, запрос POST вернет 405. |
Шаг 4: Проверить промежуточные слои. CDN (Cloudflare, Fastly), прокси-серверы, балансировщики нагрузки, WAF (Web Application Firewall) могут блокировать некоторые методы. Проверьте настройки: если метод PUT или DELETE заблокирован на уровне прокси, запрос не дойдет до вашего сервера.
Шаг 5: Для WordPress — проверить плагины безопасности. Wordfence, iThemes Security и другие плагины могут препятствовать запросам с нестандартными методами. Временно деактивируйте плагины и проверьте, исчезла ли ошибка. Если пропала — настройте исключения для нужных методов в плагине безопасности.





