DNS RobotDNS Propagation Checker
ГлавнаяDNSWHOISIPSSL
DNS RobotDNS Propagation Checker

DNS-инструменты нового поколения

Политика конфиденциальностиУсловия использованияО насБлогКонтакты

DNS Инструменты

DNS ПоискТест Скорости DNSДомен в IPNS ПоискMX ПоискПоказать все

Инструменты Email

Проверка SPF записиПроверка DMARCПроверка DKIMТест SMTPАнализ заголовков EmailПоказать все

Инструменты для сайтов

WHOIS ПоискПроверка хостингаДоступность доменаПоиск поддоменовОпределение CMSПоказать все

Сетевые инструменты

Ping инструментТрассировкаПроверка портовПроверка HTTP заголовковПроверка SSL сертификатаПоказать все

IP Инструменты

IP ПоискМой IP адресПроверка IP в чёрных спискахIP в имя хостаASN ПоискПоказать все

Утилиты

Сканер QR кодаГенератор QR кодаUPI QR Code GeneratorWiFi QR Code GeneratorПереводчик азбуки МорзеПоказать все
© 2026 DNS Robot. Разработано: ❤ Shaik Brothers
Все системы работают
Made with
Главная/Блог/Ошибка 405 Method Not Allowed: что значит и как исправить

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

Shaik Vahid30 сент. 2026 г.8 мин чтения
Страница ошибки nginx 405 Not Allowed рядом с пошаговыми решениями для 405 Method Not Allowed
Страница ошибки nginx 405 Not Allowed рядом с пошаговыми решениями для 405 Method Not Allowed

Ключевой вывод

405 Method Not Allowed означает, что сервер узнаёт URL, но не принимает использованный HTTP-метод, — например, POST, отправленный на страницу, которая принимает только GET. RFC 9110 требует, чтобы сервер перечислил допустимые методы в заголовке Allow, поэтому начните с чтения этого заголовка. Типичные причины — форма или вызов API с неправильным методом, POST к статическому файлу в nginx, обработчик маршрута, который не экспортирует этот метод (Next.js, Flask, Django), WebDAV, перехватывающий PUT и DELETE в IIS, и предварительные запросы CORS (OPTIONS), которые сервер не обрабатывает.

Advertisement

Что такое ошибка 405 Method Not Allowed?

405 Method Not Allowed — код состояния HTTP, который означает, что сервер знает запрошенный адрес, но не разрешает метод, использованный в запросе. RFC 9110 (раздел 15.5.6) определяет его так: метод «известен исходному серверу, но не поддерживается целевым ресурсом».

У каждого HTTP-запроса есть метод: GET — чтобы прочитать страницу, POST — чтобы отправить форму или что-то создать, PUT и PATCH — чтобы обновить, DELETE — чтобы удалить, OPTIONS — чтобы узнать, что разрешено. Ошибка 405 означает, что URL существует, но не для этого метода. Если бы такого URL не было вовсе, вы получили бы 404.

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

Заметка

По стандарту ответ 405 обязан содержать заголовок Allow со списком методов, которые принимает URL, например Allow: GET, HEAD. Это самая быстрая подсказка, что пошло не так.

Как выглядит ошибка 405

Сервер / фреймворкТипичное сообщение
nginx405 Not Allowed (и строка nginx под ним)
ApacheMethod Not Allowed. The requested method POST is not allowed for this URL.
IISHTTP Error 405.0 - Method Not Allowed. The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used.
Next.js / APIПустой ответ или JSON со статусом 405, который часто виден только в DevTools
Консоль браузера (CORS)Ошибка CORS, потому что предварительный запрос OPTIONS получил 405

Advertisement

Шаг 1: прочитайте заголовок Allow

Спросите у сервера, какие методы он принимает для этого URL. Отправьте запрос OPTIONS или повторите неудачный запрос с выводом заголовков:

bash
# Какие методы принимает этот URL?
curl -i -X OPTIONS https://example.com/api/contact

# Повторите неудачный запрос и посмотрите на статус и заголовок Allow
curl -i -X POST https://example.com/api/contact -d 'name=test'
# HTTP/2 405
# allow: GET, HEAD

Инструмент HTTP Headers от DNS Robot показывает код состояния и заголовки, которые URL возвращает на обычный GET-запрос, — это удобно, когда вы проверяете страницу в браузере, а не API.

Не каждый сервер соблюдает это правило. Например, встроенная страница 405 в nginx отправляется без заголовка Allow, поэтому в nginx придётся выяснить, какой блок location обрабатывает URL (решение 2).

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

  • Вернитесь назад и обновите страницу, затем снова отправьте форму. Форма, загруженная из старой копии в кеше, может отправлять данные на адрес, который с тех пор изменился.

  • Не обновляйте страницу после отправки формы. Обновление страницы, которая открылась в результате отправки формы, может повторно отправить POST на URL, принимающий только GET.

  • Проверьте адрес на опечатки или откройте главную страницу сайта и перейдите на нужную страницу заново.

  • Сообщите о проблеме. Если форма на сайте не срабатывает никогда, исправить это должен владелец сайта, поэтому отправьте ему адрес страницы.

Advertisement

Решение 1: отправляйте правильный метод на правильный URL

Самая частая причина в коде — простое несоответствие: форма или вызов fetch() использует POST, а эндпоинт принимает только GET, или запрос уходит на URL страницы вместо URL API. Сравните метод в коде с заголовком Allow и документацией API.

javascript
// Эндпоинт принимает только POST, поэтому GET (метод fetch по умолчанию) вернёт 405
const res = await fetch("/api/contact", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "Ana" }),
})
if (res.status === 405) console.log("Allowed:", res.headers.get("allow"))

Совет

Следите за слешами в конце адреса и за редиректами. Если /api/contact перенаправляет на /api/contact/ с кодом 301 или 302, многие клиенты повторяют запрос как GET, и эндпоинт, принимающий только POST, отвечает 405. Redirect Checker покажет каждый шаг перенаправления.

Решение 2: nginx возвращает 405 на POST к статическим файлам

Обработчик статических файлов в nginx обслуживает только GET и HEAD. POST к файлу .html или к location, который отдаёт файлы, а не передаёт запрос вашему приложению, получает 405 Not Allowed. Так часто бывает, когда action формы указывает на статическую страницу или когда блок location, предназначенный для приложения, не срабатывает.

Настоящее решение — отправить POST в приложение (PHP, Node, Python) через proxy_pass или fastcgi_pass в нужном блоке location. Проверьте, какой блок обрабатывает URL:

nginx
# Отправка форм должна попадать в приложение, а не в обработчик статических файлов
location /api/ {
    proxy_pass http://127.0.0.1:3000;
}

# После изменений проверьте конфигурацию и перезагрузите nginx
# sudo nginx -t && sudo systemctl reload nginx

Совет

В некоторых руководствах советуют error_page 405 =200 $uri;, чтобы превратить 405 в 200. Это лишь скрывает ошибку: данные POST всё равно не доходят до вашего кода. Вместо этого направьте запрос в приложение.

Advertisement

Решение 3: IIS блокирует PUT и DELETE (WebDAV)

На серверах Windows с IIS модуль WebDAV перехватывает методы PUT и DELETE, поэтому REST API (ASP.NET Web API и другие) отвечают на них HTTP Error 405.0. Если вы не используете WebDAV, отключите его для своего сайта в web.config:

xml
<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

Также проверьте настройки Request Filtering (фильтрация запросов) сайта в IIS Manager, вкладка HTTP Verbs: они могут напрямую запрещать отдельные методы (такие случаи IIS отмечает как 404.6, а не 405).

Решение 4: добавьте метод в обработчик маршрута

Фреймворки возвращают 405, когда маршрут существует, но обработчика для использованного метода у него нет:

  • Next.js (App Router): route.ts отвечает только на те методы, которые экспортирует. Если он экспортирует GET, но не POST, запрос POST вернёт 405. Добавьте export async function POST(request: Request) { … }.

  • Flask: по умолчанию маршруты принимают только GET. Используйте @app.route("/contact", methods=["GET", "POST"]).

  • Django: представления на основе классов возвращают 405 для методов без соответствующего обработчика (добавьте метод post()), и декоратор require_http_methods делает то же самое.

  • Express: по умолчанию запрос с неподходящим методом проваливается в 404, а не в 405. Если ваш API должен возвращать 405, добавьте общий обработчик, который выставляет заголовок Allow.

Внимание

Не исправляйте 405, разрешая все методы на всех маршрутах. Разрешайте только то, что действительно поддерживает каждый эндпоинт, и следите, чтобы заголовок Allow оставался точным.

Advertisement

Решение 5: обрабатывайте предварительные запросы CORS (OPTIONS)

Когда веб-страница обращается к API на другом домене с JSON или нестандартными заголовками, браузер сначала отправляет предварительный запрос OPTIONS (preflight). Если API отвечает на этот OPTIONS кодом 405, браузер сообщает об ошибке CORS и вообще не отправляет настоящий запрос, хотя сам эндпоинт сработал бы.

Настройте API так, чтобы на OPTIONS для этих маршрутов он отвечал 204 или 200 с правильными заголовками Access-Control-Allow-Methods и Access-Control-Allow-Headers. В большинстве фреймворков для этого есть готовое CORS-middleware. Например, собственный DNS Lookup API от DNS Robot отвечает на preflight кодом 204 с заголовками CORS, поэтому браузеры могут обращаться к нему с любого сайта.

Совет

В DevTools (F12) → Network (Сеть) включите фильтр, который показывает все запросы, и найдите запрос OPTIONS прямо перед неудачным вызовом. Его статус покажет, был ли виноват preflight.

405 и 400, 403, 404, 501: в чём разница

КодЗначение
405 Method Not AllowedURL существует, но не для этого метода
400 Bad RequestСам запрос составлен неправильно
403 ForbiddenСервер понял запрос, но не разрешает доступ
404 Not FoundПо этому URL ничего нет
501 Not ImplementedСервер не поддерживает этот метод ни для одного URL

Связанные руководства: 400 Bad Request, 403 Forbidden и 401 Unauthorized.

Проверьте, что возвращает URL

HTTP Headers Checker от DNS Robot показывает код состояния и заголовки ответа для любого URL, чтобы вы могли подтвердить ошибку 405 и увидеть, какое ПО работает на сервере.

Попробовать HTTP Headers Checker

Advertisement

Часто задаваемые вопросы

Это значит, что сервер узнаёт URL, но не принимает использованный HTTP-метод, например POST, отправленный на страницу, которая разрешает только GET. Ответ должен содержать заголовок Allow со списком методов, которые этот URL принимает.

Связанные инструменты

HTTP Headers CheckRedirect CheckerSSL Certificate Check

Похожие статьи

400 Bad Request: что значит и как исправитьОшибка 403 Forbidden: Что Она Означает и Как ИсправитьОшибка HTTP 401 Unauthorized: Что Означает и Как Исправить

Содержание

  • Что такое ошибка 405 Method Not Allowed?
  • Как выглядит ошибка 405
  • Шаг 1: прочитайте заголовок Allow
  • Если вы посетитель сайта
  • Решение 1: отправляйте правильный метод на правильный URL
  • Решение 2: nginx возвращает 405 на POST к статическим файлам
  • Решение 3: IIS блокирует PUT и DELETE (WebDAV)
  • Решение 4: добавьте метод в обработчик маршрута
  • Решение 5: обрабатывайте предварительные запросы CORS (OPTIONS)
  • 405 и 400, 403, 404, 501: в чём разница
  • Часто задаваемые вопросы