DNS RobotDNS Propagation Checker
InícioDNSWHOISIP LookupSSL
DNS RobotDNS Propagation Checker

Kit de ferramentas DNS de última geração

Política de PrivacidadeTermos de ServiçoSobre NósBlogContato

Ferramentas DNS

Consulta DNSTeste de Velocidade DNSDomínio para IPConsulta NSConsulta MXVer tudo

Ferramentas de E-mail

Verificador SPFVerificador DMARCVerificador DKIMTeste SMTPAnalisador de Cabeçalho de E-mailVer tudo

Ferramentas de Sites

Consulta WHOISVerificador de HospedagemDisponibilidade de DomínioLocalizador de SubdomíniosDetector de CMSVer tudo

Ferramentas de Rede

Ferramenta PingTracerouteVerificador de PortasVerificador de Cabeçalhos HTTPVerificador de Certificado SSLVer tudo

Ferramentas de IP

Consulta de IPQual é Meu IPVerificador de Lista Negra de IPIP para HostnameConsulta ASNVer tudo

Ferramentas Úteis

Leitor de QR CodeGerador de QR CodeUPI QR Code GeneratorWiFi QR Code GeneratorTradutor de Código MorseVer tudo
© 2026 DNS Robot. Desenvolvido por ❤ Shaik Brothers
Todos os sistemas em operação
Made with
Início/Blog/Erro 405 Method Not Allowed: o que é e como resolver

Erro 405 Method Not Allowed: o que é e como resolver

Shaik Vahid30 de set. de 20268 min de leitura
Página de erro 405 Not Allowed do nginx ao lado das correções passo a passo para o 405 Method Not Allowed
Página de erro 405 Not Allowed do nginx ao lado das correções passo a passo para o 405 Method Not Allowed

Ponto-Chave

O 405 Method Not Allowed significa que o servidor reconhece a URL, mas não aceita ali o método HTTP que você usou, por exemplo um POST enviado a uma página que só aceita GET. A RFC 9110 exige que o servidor liste os métodos que aceita em um cabeçalho Allow, então comece lendo esse cabeçalho. As causas típicas são um formulário ou uma chamada de API usando o método errado, um POST para um arquivo estático no nginx, um route handler que não exporta esse método (Next.js, Flask, Django), o WebDAV interceptando PUT e DELETE no IIS e requisições OPTIONS de preflight do CORS que o servidor não trata.

Advertisement

O que é o erro 405 Method Not Allowed?

O 405 Method Not Allowed (método não permitido) é um código de status HTTP que significa que o servidor conhece o endereço que você pediu, mas não permite o método que a sua requisição usou. A RFC 9110 (seção 15.5.6) o define como um método "known by the origin server but not supported by the target resource", ou seja, conhecido pelo servidor de origem, mas não suportado pelo recurso de destino.

Toda requisição HTTP tem um método: GET para ler uma página, POST para enviar um formulário ou criar algo, PUT e PATCH para atualizar, DELETE para remover, OPTIONS para perguntar o que é permitido. Um 405 significa que a URL existe, mas não para aquele verbo. Se a URL nem existisse, você receberia um 404.

Como o problema está na forma como a requisição foi feita, e não em uma página que falta, um 405 quase sempre precisa ser resolvido pelo desenvolvedor do site. Os visitantes normalmente esbarram nele depois de enviar um formulário ou de seguir um link desatualizado.

Nota

O padrão diz que uma resposta 405 deve incluir um cabeçalho Allow listando os métodos que a URL aceita, por exemplo Allow: GET, HEAD. É a pista mais rápida sobre o que deu errado.

Como o erro 405 aparece

Servidor / frameworkMensagem típica
nginx405 Not Allowed (com nginx logo abaixo)
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 / APIsUma resposta vazia ou em JSON com status 405, muitas vezes visível só no DevTools
Console do navegador (CORS)Um erro de CORS, porque o preflight OPTIONS recebeu um 405

Advertisement

Passo 1: leia o cabeçalho Allow

Pergunte ao servidor quais métodos ele aceita para aquela URL. Envie uma requisição OPTIONS ou repita a requisição que falha mostrando os cabeçalhos:

bash
# Quais métodos esta URL aceita?
curl -i -X OPTIONS https://example.com/api/contact

# Repita a requisição que falha e veja o status e o cabeçalho Allow
curl -i -X POST https://example.com/api/contact -d 'name=test'
# HTTP/2 405
# allow: GET, HEAD

O Verificador de Cabeçalhos HTTP do DNS Robot mostra o código de status e os cabeçalhos que uma URL retorna para uma requisição GET normal, o que ajuda quando você está verificando uma página no navegador, e não uma API.

Nem todo servidor segue a regra. A página 405 nativa do nginx, por exemplo, é enviada sem cabeçalho Allow, então no nginx você vai precisar verificar qual bloco location trata a URL (correção 2).

Se você é um visitante

  • Volte e recarregue a página e depois envie o formulário de novo. Um formulário carregado de uma cópia antiga em cache pode enviar os dados para um endereço que já mudou.

  • Não atualize a página depois de enviar. Atualizar uma página que foi o resultado de um formulário pode reenviar um POST para uma URL que só aceita GET.

  • Confira o endereço em busca de erros de digitação, ou abra a página inicial do site e navegue de novo.

  • Avise o site. Se um formulário do site sempre falha, quem precisa resolver é o dono do site, então envie o endereço da página para ele.

Advertisement

Correção 1: envie o método certo para a URL certa

A causa mais comum no código é simplesmente uma incompatibilidade: um formulário ou uma chamada fetch() usa POST enquanto o endpoint só aceita GET, ou a requisição vai para a URL da página em vez da URL da API. Compare o método no seu código com o cabeçalho Allow e com a documentação da API.

javascript
// O endpoint só permite POST, então um GET (o padrão do fetch) retorna 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"))

Dica

Atenção às barras no final e aos redirecionamentos. Se /api/contact redireciona para /api/contact/ com um 301 ou 302, muitos clientes repetem a requisição como GET, e um endpoint que só aceita POST responde 405. Use o Verificador de Redirecionamento para ver cada salto.

Correção 2: o nginx retorna 405 para POST em arquivos estáticos

O handler de arquivos estáticos do nginx só atende GET e HEAD. Um POST para um arquivo .html, ou para um location que serve arquivos em vez de repassar a requisição para a sua aplicação, recebe 405 Not Allowed. Isso costuma acontecer quando o action de um formulário aponta para uma página estática, ou quando um bloco location feito para o seu app não corresponde à URL.

A correção de verdade é enviar o POST para uma aplicação (PHP, Node, Python) com proxy_pass ou fastcgi_pass no bloco location certo. Verifique qual bloco trata a URL:

nginx
# Os POSTs de formulários precisam chegar ao app, não ao handler de arquivos estáticos
location /api/ {
    proxy_pass http://127.0.0.1:3000;
}

# Teste e recarregue depois das alterações
# sudo nginx -t && sudo systemctl reload nginx

Dica

Alguns guias sugerem error_page 405 =200 $uri; para transformar o 405 em 200. Isso só esconde o erro: os dados do POST continuam sem chegar ao seu código. Em vez disso, encaminhe a requisição para a aplicação.

Advertisement

Correção 3: o IIS bloqueia PUT e DELETE (WebDAV)

Em servidores Windows com IIS, o módulo WebDAV assume os verbos PUT e DELETE, então as APIs REST (ASP.NET Web API e outras) respondem HTTP Error 405.0 para eles. Se você não usa WebDAV, remova-o do seu site no web.config:

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

Verifique também as configurações de Filtragem de Solicitações (Request Filtering) do site no Gerenciador do IIS (aba Verbos HTTP), que podem negar métodos específicos de cara (o IIS informa esses casos como 404.6, não como 405).

Correção 4: adicione o método ao seu route handler

Os frameworks retornam 405 quando uma rota existe, mas não tem handler para o método usado:

  • Next.js (App Router): um route.ts só responde aos métodos que exporta. Se ele exporta GET mas não POST, um POST retorna 405. Adicione export async function POST(request: Request) { … }.

  • Flask: as rotas aceitam só GET por padrão. Use @app.route("/contact", methods=["GET", "POST"]).

  • Django: as class-based views retornam 405 para métodos sem um handler correspondente (adicione um método post()), e o decorator require_http_methods faz o mesmo.

  • Express: por padrão, um método sem rota correspondente cai no 404, não no 405. Se a sua API deve retornar 405, adicione um handler genérico que defina o cabeçalho Allow.

Aviso

Não resolva um 405 liberando todos os métodos em todas as rotas. Permita só o que cada endpoint realmente suporta e mantenha o cabeçalho Allow correto.

Advertisement

Correção 5: trate as requisições de preflight do CORS (OPTIONS)

Quando uma página web chama uma API em outro domínio com JSON ou cabeçalhos personalizados, o navegador primeiro envia uma requisição de preflight OPTIONS. Se a API responde a esse OPTIONS com 405, o navegador mostra um erro de CORS e nunca envia a requisição real, mesmo que o endpoint real fosse funcionar.

Faça a API responder ao OPTIONS dessas rotas com 204 ou 200 e os cabeçalhos Access-Control-Allow-Methods e Access-Control-Allow-Headers corretos. A maioria dos frameworks tem um middleware de CORS que faz isso por você. Por exemplo, a própria API de Consulta DNS do DNS Robot responde ao preflight com 204 e os cabeçalhos de CORS, para que os navegadores possam chamá-la a partir de qualquer site.

Dica

No DevTools (F12) → Rede, ative o filtro que mostra todas as requisições e procure a requisição OPTIONS logo antes da chamada que falhou. O status dela diz se o problema foi o preflight.

405 vs. 400, 403, 404 e 501

CódigoSignificado
405 Method Not AllowedA URL existe, mas não para este método
400 Bad RequestA própria requisição está malformada
403 ForbiddenO servidor entendeu o pedido, mas não permite o acesso
404 Not FoundNão existe nada nesta URL
501 Not ImplementedO servidor não suporta este método em nenhuma URL

Guias relacionados: 400 Bad Request, 403 Forbidden e 401 Unauthorized.

Veja o que uma URL retorna

O Verificador de Cabeçalhos HTTP do DNS Robot mostra o código de status e os cabeçalhos de resposta de qualquer URL, para você confirmar um 405 e ver o software de servidor por trás dele.

Testar Verificador de Cabeçalhos HTTP

Advertisement

Perguntas Frequentes

Significa que o servidor reconhece a URL, mas não aceita o método HTTP usado, como um POST enviado a uma página que só permite GET. A resposta deve incluir um cabeçalho Allow listando os métodos que essa URL aceita.

Ferramentas Relacionadas

HTTP Headers CheckRedirect CheckerSSL Certificate Check

Artigos Relacionados

Erro 400 Bad Request: o que é e como resolverErro 403 Forbidden: O Que Significa e Como CorrigirErro HTTP 401 Unauthorized: O Que Significa e Como Corrigir

Índice

  • O que é o erro 405 Method Not Allowed?
  • Como o erro 405 aparece
  • Passo 1: leia o cabeçalho Allow
  • Se você é um visitante
  • Correção 1: envie o método certo para a URL certa
  • Correção 2: o nginx retorna 405 para POST em arquivos estáticos
  • Correção 3: o IIS bloqueia PUT e DELETE (WebDAV)
  • Correção 4: adicione o método ao seu route handler
  • Correção 5: trate as requisições de preflight do CORS (OPTIONS)
  • 405 vs. 400, 403, 404 e 501
  • Perguntas Frequentes