Código de status HTTP · Erros do cliente (4xx)
Erro 418 I'm a teapot
O 418 I'm a teapot é um código de brincadeira da RFC 2324, o Hyper Text Coffee Pot Control Protocol de 1º de abril de 1998, para um bule de chá que recebe pedido de café. Ele não faz parte do HTTP; se você recebeu um, o servidor está recusando o pedido de propósito, quase sempre em tom de piada.
| Classe | 4xx, Erros do cliente |
|---|---|
| Definido em | RFC 9110 §15.5.19 |
| Pode ir para o cache por padrão | Só com Cache-Control ou Expires explícitos |
| Pode repetir o pedido | Não adianta; o servidor está recusando de propósito, geralmente de brincadeira |
| Cabeçalhos relevantes | Nenhum específico deste código |
| Situação | Obsoleto: Reservado como "(Unused)" na RFC 9110 §15.5.19; não pode ser usado para nenhum fim real. |
O que significa o 418
A RFC 2324 definiu o HTCPCP para controlar cafeteiras e deu o 418 a um bule de chá que se recusa a fazer café; a RFC 7168 depois estendeu a piada ao chá. O código se espalhou mesmo assim: Node.js, Go (http.StatusTeapot) e Python (HTTPStatus.IM_A_TEAPOT) conhecem o 418, e o Google já exibiu uma página de bule em google.com/teapot.
Em 2017, uma proposta de tirar o 418 do Node.js e do Go gerou muita reação contrária. A RFC 9110, seção 15.5.19, encerrou o assunto marcando o 418 como "(Unused)": ele continua reservado no registro da IANA justamente porque foi usado como piada demais para receber um significado sério.
Causas comuns
Se você está visitando o site
- Você caiu numa página de easter egg ou num endpoint de piada de algum desenvolvedor.
- O site usa o 418 como forma bem-humorada de recusar tráfego que parece automatizado, como um scraper ou um user agent incomum.
Se você administra o servidor
- Uma rota ou regra de firewall devolve 418 de propósito; procure por 418 ou StatusTeapot no código e nas regras do WAF.
- Um servidor de mock ou fixture de teste usa o 418 como status obviamente falso e isso vazou para um ambiente real.
Como resolver
Se você está visitando o site
- Se você foi barrado como robô, tente um navegador comum, sem extensões de automação nem VPN; fora isso, aproveite a piada.
Se você administra o servidor
- Para recusas de verdade, use um código de verdade: 403 para cliente bloqueado, 429 para limite de taxa, 405 para método não suportado. Monitoramento e bibliotecas entendem esses códigos.
Como enviar um 418
app.post('/brew', (req, res) => {
res.status(418).json({ error: 'I\'m a teapot' });
});// app/brew/route.ts
export async function POST() {
return Response.json({ error: 'I\'m a teapot' }, { status: 418 });
}mux.HandleFunc("POST /brew", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusTeapot) // 418
w.Write([]byte(`{"error":"I'm a teapot"}`))
})from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.post("/brew")
def brew():
raise HTTPException(status_code=418, detail="I'm a teapot")location = /coffee {
return 418;
}Costuma ser confundido com
- 418 vs 403
- O 403 é o jeito padrão de recusar um cliente; o 418 é uma piada que clientes e monitoramento tratam só como um 4xx genérico.
- 418 vs 405
- Um bule que recebe pedido de café é, falando sério, um método que o recurso não suporta: 405.
Perguntas frequentes
- O 418 é um código de status HTTP de verdade?
- Não no HTTP. Ele vem da RFC 2324, uma RFC de 1º de abril, e a RFC 9110 lista o 418 como "(Unused)" e reservado, então ele não pode receber um significado real enquanto a piada estiver em uso.
- Por que um site me devolveu 418?
- O site faz isso de propósito, como easter egg ou para barrar tráfego que considera automatizado. O código não tem significado padrão além de "pedido recusado".
- Minha API deve responder 418?
- Não. Escolha o código padrão que descreve a recusa, como 403, 405 ou 429, para clientes, SDKs e monitoramento reagirem do jeito certo.
Revisado em por Arielton Oberek.