Marcio Cunha

O Significado do Erro HTTP 405 Method Not Allowed e Como Corrigir no Servidor

Entenda por que o código HTTP 405 acontece quando o servidor recusa uma requisição e aprenda métodos práticos para diagnosticar e resolver o problema em APIs e servidores web.

Marcio Cunha11 min
Também disponível em:EnglishEspañol
Resumo
  • O código HTTP 405 indica que o servidor compreende a rota acessada, mas proíbe explicitamente o verbo HTTP utilizado na requisição.
  • A correção envolve verificar o roteamento no backend, as regras do servidor web e a presença correta do cabeçalho Allow.
  • Requisições de navegador envolvendo CORS preflight frequentemente esbarram em bloqueios de métodos se o proxy não estiver configurado.
  • Testar rotas com ferramentas de linha de comando como cURL ajuda a isolar se o comportamento é gerado por regras de firewall ou pela aplicação.
  • Manter a documentação da API alinhada com o comportamento real do servidor evita confusões para clientes que consomem os endpoints.

O que é o código HTTP 405 Method Not Allowed

Quando navegamos na internet ou desenvolvemos sistemas, conversamos com servidores através de um protocolo chamado HTTP. Esse protocolo define regras de comunicação, incluindo palavras de comando conhecidas como verbos HTTP — por exemplo, GET para buscar dados, POST para enviar informações, PUT para atualizar e DELETE para apagar. Na prática, o erro HTTP 405 avisa que o servidor encontrou o endereço exato que você procurou, mas recusou o tipo de comando que você tentou usar.

Para entender melhor, imagine que você vá a um restaurante e use a porta de serviço para entrar como se fosse o salão de clientes. O estabelecimento existe e o endereço está correto, mas aquela ação específica não é permitida ali. É exatamente isso que acontece quando um cliente faz uma requisição POST para uma URL que só aceita comandos GET. O servidor web intercepta a tentativa e responde com o código 405, bloqueando a execução por motivos de segurança, design da API ou regras de roteamento.

Esse mecanismo protege a integridade do sistema, impedindo que usuários enviem dados para lugares onde não deveriam. No entanto, para quem está desenvolvendo ou integrando sistemas, esse erro pode causar bastante frustração se não for diagnosticado corretamente. Nas próximas seções, vamos detalhar as causas mais comuns e como ajustar o código e a infraestrutura para eliminar esse comportamento indesejado.

Causas comuns do erro 405 em aplicações web

A origem mais frequente do erro 405 é uma discrepância entre o que o cliente espera e o que o servidor programou para aquela rota específica. Por exemplo, um desenvolvedor front-end pode escrever um código JavaScript tentando enviar um formulário usando o método PUT, mas o desenvolvedor do back-end configurou a rota no servidor apenas para aceitar POST. O servidor cumprirá seu papel de guarda e rejeitará a chamada.

Outra causa corriqueira envolve redirecionamentos automáticos executados por servidores web como Nginx ou Apache. Quando um cliente faz uma requisição POST para uma URL que termina sem barra no final (como /usuarios), o servidor pode tentar redirecionar o navegador para a versão com barra (/usuarios/). Historicamente, alguns servidores transformavam requisições POST em GET durante esse redirecionamento de rota, gerando conflitos e respostas de erro inesperadas.

Também devemos considerar regras de segurança aplicadas em firewalls de aplicativos web (WAF) ou proxies reversos. Esses intermediários filtram o tráfego de entrada e podem bloquear métodos específicos, como DELETE ou PATCH, por considerarem potenciais ameaças de exploração. Nesses cenários, a aplicação nem chega a receber a requisição, pois a barreira de segurança bloqueou o verbo no perímetro da infraestrutura.

Como diagnosticar o problema com ferramentas de linha de comando

Antes de alterar qualquer código no servidor, é fundamental isolar a origem exata do erro 405. Ferramentas gráficas ou navegadores podem esconder detalhes importantes dos cabeçalhos de resposta HTTP, dificultando a análise. O comando cURL, disponível na maioria dos terminais modernos, é o melhor aliado para inspecionar requisições de forma limpa e direta.

Podemos executar uma chamada forçando um método específico e observando a resposta detalhada do servidor. Veja um exemplo prático de comando no terminal:

curl -i -X DELETE https://api.exemplo.com/recurso/123

O parâmetro -i instrui o cURL a exibir os cabeçalhos HTTP junto com o corpo da resposta. Ao analisar a saída, preste muita atenção ao cabeçalho chamado Allow. Servidores que retornam o código 405 devem, por especificação do protocolo HTTP, incluir esse cabeçalho informando exatamente quais métodos são permitidos naquele endereço (por exemplo: Allow: GET, POST).

Se o cabeçalho Allow listar os métodos corretos e você ainda receber o erro, o problema está na rota chamada pelo cliente. Caso o cabeçalho retorne vazio ou seja omitido por completo, a falha pode estar em um proxy intermediário, como um balanceador de carga ou uma regra de firewall bloqueando o tráfego antes de atingir a aplicação principal.

Corrigindo o erro 405 no código do seu servidor

A solução direta para o erro 405 reside em ajustar o mapeamento de rotas no back-end. Cada framework de desenvolvimento possui sua própria forma de declarar quais métodos HTTP uma URL aceita. Se você utiliza Node.js com Express, por exemplo, é comum definir rotas separadas para cada verbo, conforme o exemplo abaixo:

const express = require('express');
const app = express();

// Rota que aceita apenas GET
app.get('/api/status', (req, res) => {
    res.json({ status: 'ok' });
});

// Tentativa de enviar POST aqui gerará erro 405 se não houver app.post()
app.listen(3000);

Se a sua aplicação precisar aceitar múltiplos métodos na mesma URL, você deve declarar explicitamente essa intenção no código. No framework Express, podemos usar o método app.route() para agrupar diferentes verbos sob o mesmo endereço, evitando mensagens de erro indesejadas:

app.route('/api/artigos')
    .get((req, res) => {
        res.send('Lista de artigos');
    })
    .post((req, res) => {
        res.send('Artigo criado com sucesso');
    });

Linguagens como Python (com Django ou FastAPI) e PHP (com Laravel ou Symfony) seguem lógica semelhante. O segredo é garantir que todas as interações esperadas pelo front-end estejam devidamente mapeadas no código do servidor, eliminando lacunas de roteamento.

Ajustando configurações em servidores web e proxies reversos

Muitas vezes o código da aplicação está correto, mas o servidor web que fica na frente da aplicação — como Nginx, Apache ou IIS — está bloqueando ou manipulando os métodos HTTP. O Nginx, por exemplo, pode retornar um erro 405 se houver um redirecionamento interno mal configurado ou se arquivos estáticos forem acessados com métodos dinâmicos.

Se você estiver tentando servir arquivos estáticos e receber um erro 405 ao tentar usar um método POST, verifique se a diretiva do servidor web está configurada para permitir apenas leitura. Ajustar o arquivo de configuração do Nginx para lidar corretamente com requisições personalizadas resolve grande parte dessas ocorrências em ambientes de produção.

Também vale a pena verificar se existem regras de controle de acesso restritivas no arquivo .htaccess do Apache ou nas diretivas de segurança do servidor. Certifique-se de que módulos de segurança não estejam interpretando verbos HTTP legítimos como tentativas de invasão, o que causaria o bloqueio imediato da requisição.

Conclusão e boas práticas para evitar falhas de método

O código de estado HTTP 405 Method Not Allowed é um mecanismo importante de proteção e organização na arquitetura web. Compreender sua origem permite que engenheiros e desenvolvedores diagnostiquem falhas rapidamente, separando problemas de código na aplicação de configurações incorretas em servidores e proxies.

Para evitar que esse problema afete usuários finais, mantenha sempre a documentação da sua API rigorosamente sincronizada com o código. Adotar testes automatizados que validem todos os verbos HTTP permitidos em cada endpoint garante que futuras atualizações não introduzam quebras silenciosas no sistema.