Ошибки

Ошибка 405 Method Not Allowed: что значит и как исправить

405 Method Not Allowed — адрес существует, но этот метод запроса по нему не принимается. Типичный случай: форма отправляет данные методом POST на адрес, который умеет только отдавать страницу. В nginx так бывает, когда POST приходит на обычный файл — например, на .html.

Обновлено 07.10.2026≈ 5 мин чтения
Содержание 11

Что означает код 405

Каждый запрос к сайту делается каким-то методом. GET получает страницу, HEAD — только её заголовки, POST отправляет данные (например, форму), PUT и DELETE в API заменяют и удаляют записи, OPTIONS спрашивает, что разрешено. Код 405 значит: ресурс по этому адресу есть, но метод, которым к нему обратились, он не поддерживает.

Вместе с 405 сервер обязан прислать заголовок Allow со списком методов, которые по этому адресу работают, — например, Allow: GET, HEAD. Сервер общего назначения обязан поддерживать только GET и HEAD, остальные методы стандарт HTTP оставляет на его усмотрение.

Если вы посетитель

  1. Откройте страницу заново из адресной строки — так браузер сделает обычный запрос GET.
  2. Если ошибка появилась после отправки формы, проблема на стороне сайта: повторная отправка не поможет. Сообщите владельцу, какую форму вы отправляли и когда.
  3. Если 405 вернул API, сверьтесь с его документацией: возможно, для этой операции нужен другой метод или другой адрес.

Почему nginx отвечает 405

Когда nginx отдаёт обычные файлы сам, без PHP или приложения, он принимает только методы GET, HEAD и POST. На любой другой метод — PUT, DELETE, PATCH — он отвечает 405 ещё до того, как станет искать файл.

С POST хитрее: если файл существует, nginx отвечает 405, если файла нет — 404. Поэтому форма, которая отправляет данные на адрес вида /contact.html, получит 405: nginx нашёл файл, но выполнить POST на обычный файл нельзя. Страница ошибки в этом случае называется «405 Not Allowed».

Метод TRACE nginx не выполняет никогда: на него всегда приходит 405, а в журнале ошибок на уровне info — строка «client sent TRACE method».

Частые причины

  • Форма отправляет данные на файл, а не на обработчик. В атрибуте action формы указан адрес страницы (.html) вместо скрипта, который принимает данные.
  • Перенаправление потеряло POST. Форма отправляет данные на http:// или на адрес без косой черты в конце, сервер перенаправляет кодом 301 или 302 — и стандарт разрешает браузеру повторить запрос уже методом GET. Данные теряются, а обработчик, который ждёт POST, может ответить 405.
  • В приложении нет обработчика для этого метода. Приложение может ответить 405 само, если маршрут для этого адреса есть, а для нужного метода — нет.
  • Запрос CORS. Перед некоторыми запросами к API на другом домене браузер сам отправляет предварительный запрос методом OPTIONS — так работает механизм CORS. Если адрес API не умеет отвечать на OPTIONS, на этот предварительный запрос может прийти 405. Проверяйте код ответа именно на запрос OPTIONS.

Как найти причину

Сначала посмотрите, кто ответил. Если внизу страницы ошибки подпись nginx, а заголовок — «405 Not Allowed», запрос не дошёл до программы сайта: nginx пытался отдать файл сам. Если страница выглядит иначе, 405 вернуло приложение.

Какие адреса и какими методами получают 405, покажет журнал доступа:

awk '$9 == 405 {print $6, $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

В стандартном формате журнала шестое поле — метод (с кавычкой в начале), седьмое — адрес.

Повторить запрос можно командой curl — ключ -X задаёт метод:

curl -i -X POST https://example.com/page.html

В ответе ищите код и заголовок Allow, если сервер его прислал.

Как исправить

Форма. Укажите в action адрес обработчика — скрипта или маршрута приложения, который принимает данные.

Перенаправление. Отправляйте форму сразу на итоговый адрес: с https:// и с косой чертой, если она есть в адресах сайта. Если старый адрес обработчика должен остаться, перенаправляйте кодом 308 или 307: они запрещают браузеру менять метод. В nginx (код 308 поддерживается с версии 1.13.0):

location = /old-form/ {
    return 308 /new-form/;
}

Приложение. Добавьте обработку нужного метода в маршрут. Проверьте и nginx: адрес должен попадать в блок location, который передаёт запросы приложению (proxy_pass или fastcgi_pass), а не отдаёт файлы с диска.

CORS. Научите адрес API отвечать на запросы OPTIONS и присылать в ответ нужные заголовки Access-Control-Allow-… — обычно это делают в самом приложении.

После любых правок: sudo nginx -t, затем sudo systemctl reload nginx.

На обычном хостинге

Проверьте, куда отправляет данные форма: адрес в action и настройки плагина форм. Если всё верно, а 405 остаётся, напишите в поддержку — укажите страницу, время и что именно вы отправляли.

405 и поиск Яндекса

По справке Яндекса, при ответе 405 робот не смог проиндексировать страницу: метод запроса для этого ресурса не разрешён. Яндекс советует настроить на сервере поддержку нужных методов и при необходимости проверить настройки CORS. Страница, которая должна быть в поиске, должна отвечать кодом 200.

Чем 405 отличается от соседних кодов

КодКогда возникает
403Доступ к ресурсу запрещён
404Ресурса нет
405Ресурс есть, но этот метод запроса по адресу не принимается
501Сервер вообще не поддерживает этот метод — ни для одного адреса

Источники

Сверено 6 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 07.10.2026