Código de status HTTP · Sucesso (2xx)
204 No Content
O 204 No Content significa que o pedido deu certo e, de propósito, não há corpo na resposta. É a resposta comum para DELETE, para PUT ou PATCH que salva sem devolver o recurso e para o preflight de CORS; o bug clássico é o código do cliente chamar response.json() nela.
| Classe | 2xx, Sucesso |
|---|---|
| Definido em | RFC 9110 §15.3.5 |
| Pode ir para o cache por padrão | Sim, de forma heurística |
| Pode repetir o pedido | Não é preciso; o pedido deu certo |
| Cabeçalhos relevantes |
|
O que significa o 204
A RFC 9110, seção 15.3.5, diz que o 204 termina junto com os cabeçalhos: não pode ter conteúdo nem trailers. Os cabeçalhos continuam valendo e descrevem o recurso depois da ação, então um 204 a um PUT com ETag informa o novo entity tag sem reenviar os dados.
O código também quer dizer "fique onde está". Um formulário enviado para um endpoint que responde 204 mantém o navegador na página atual, e é por isso que a especificação cita o botão salvar de editores de documentos.
O padrão Fetch trata o 204 como status de corpo nulo. new Response("x", { status: 204 }) lança TypeError, e response.json() num 204 de verdade falha com "Unexpected end of JSON input".
Quando usar
- DELETE /relatorios/42 que deu certo.
- PUT ou PATCH em que o cliente já tem os dados que enviou e não precisa de eco.
- Respostas ao preflight de CORS (OPTIONS), beacons de analytics enviados com navigator.sendBeacon e o velho truque de responder 204 em /favicon.ico.
Causas comuns
Se você administra o servidor
- O frontend quebra com SyntaxError: Unexpected end of JSON input porque interpreta toda resposta como JSON, inclusive o 204 vazio.
- O handler tenta mandar corpo com 204: o Express descarta em silêncio, o Write do Go devolve http.ErrBodyNotAllowed e um servidor feito à mão pode corromper a próxima resposta numa conexão keep-alive.
Como resolver
Se você administra o servidor
- No cliente, verifique res.status === 204 (ou o Content-Length) antes de chamar res.json().
- Se o cliente precisa do objeto atualizado, devolva 200 com corpo em vez de 204.
Como enviar um 204
app.delete('/reports/:id', (req, res) => {
res.status(204).end();
});// app/reports/[id]/route.ts
export async function DELETE() {
return new Response(null, { status: 204 });
}mux.HandleFunc("DELETE /reports/{id}", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNoContent) // 204
})from fastapi import FastAPI, Response
app = FastAPI()
@app.delete("/reports/{id}")
def delete_report(id: str):
return Response(status_code=204)location /api/ {
# Answer CORS preflight without hitting the app
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin "https://app.example.com";
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE";
add_header Access-Control-Allow-Headers "Authorization, Content-Type";
add_header Access-Control-Max-Age 86400;
return 204;
}
proxy_pass http://app;
}Costuma ser confundido com
- 204 vs 200
- Do 200 se espera um corpo; o 204 garante que não há nenhum, então o cliente não deve tentar interpretar.
- 204 vs 205
- O 205 Reset Content também vem sem corpo, mas ainda pede ao cliente que limpe o formulário ou a tela que enviou o pedido.
- 204 vs 404
- Num DELETE de algo que já não existe, algumas APIs respondem 404 e outras 204 para manter o DELETE idempotente do ponto de vista do cliente; escolha um e documente.
Perguntas frequentes
- Uma resposta 204 pode ter corpo?
- Não. A RFC 9110 diz que o 204 termina no fim dos cabeçalhos e não pode ter conteúdo nem trailers. Os frameworks removem ou recusam qualquer corpo que você tente enviar.
- DELETE deve devolver 204 ou 200?
- Devolva 204 quando não há nada útil a mandar de volta, que é o caso comum. Devolva 200 se incluir algo, como o objeto apagado ou um resumo do que foi removido.
- Por que o fetch() dá erro com resposta 204?
- Não é o fetch, é a leitura do corpo. response.json() num corpo vazio falha com "Unexpected end of JSON input". Confira response.status === 204 antes de interpretar.
- O que o navegador faz quando um formulário recebe 204?
- Ele continua na página atual e não navega. Isso torna o 204 útil para endpoints de salvar ou de rastreamento em que o usuário não deve sair da página.
Revisado em por Arielton Oberek.