A requisição está malformada ou é inválida.
Quando usar
JSON que não pode ser interpretado, campos obrigatórios ausentes, tipos errados.
Causas comuns e soluções
Causas comuns: JSON malformado, como uma vírgula sobrando no final ou strings entre aspas simples, um corpo que não corresponde ao Content-Type declarado, campos obrigatórios faltando ou parâmetros de query inválidos. Antes de culpar o servidor, veja os bytes exatos enviados, com curl -v ou o payload da requisição na aba Network do DevTools. A maioria das APIs explica o problema no corpo da resposta, então leia-o.
A infraestrutura também gera 400: o nginx retorna “Request Header Or Cookie Too Large” quando os cookies estouram large_client_header_buffers, e “The plain HTTP request was sent to HTTPS port” quando você usa http:// na porta 443. Load balancers rejeitam cabeçalhos ou valores de Host malformados. Limpar os cookies do site resolve muitos 400 que só acontecem no navegador. No seu próprio servidor, reserve o 400 para entrada que não dá para interpretar e use 422 para falhas de validação.
Erro do cliente (4xx)
Os códigos 4xx são erros do cliente: a própria requisição está errada, não está autorizada ou aponta para algo que não existe. Repetir a mesma requisição não vai adiantar.
Como fica
HTTP/1.1 400 Bad RequestComo enviar
| Node.js / Express | res.status(400).end() |
|---|---|
| Python / Flask | return '', 400 |
| nginx | return 400; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/