Algo deu errado no servidor.
Quando usar
Exceções não tratadas. Registre os detalhes no log, não os exponha ao cliente.
Causas comuns e soluções
Um 500 significa uma exceção não tratada ou um erro de configuração no servidor. Comece pelos logs no horário da requisição: stack traces da aplicação, logs de erro do PHP ou do Python, journalctl, docker logs ou CloudWatch. Causas comuns: um valor null ou undefined, uma consulta ao banco de dados que falhou ou uma migração não aplicada, uma variável de ambiente faltando em produção, um erro de sintaxe no .htaccess ou permissões erradas em um script.
Torne os 500 depuráveis: retorne um ID de requisição em um cabeçalho e no corpo, registre-o junto com o stack trace e envie os erros para um tracker como o Sentry. Nunca mostre stack traces aos clientes em produção. Não use 500 para erros do cliente; falhas de validação são 4xx, para que os alertas sobre 5xx continuem significativos. Tentar de novo com backoff ajuda em falhas transitórias, mas um bug determinístico falha toda vez.
Erro do servidor (5xx)
Os códigos 5xx são erros do servidor: a requisição pode estar certa, mas o servidor ou algo por trás dele falhou. Vale a pena configurar alertas para eles.
Como fica
HTTP/1.1 500 Internal Server ErrorComo enviar
| Node.js / Express | res.status(500).end() |
|---|---|
| Python / Flask | return '', 500 |
| nginx | return 500; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/