Skip to content

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.

Dados sobre este código de status
Classe4xx, Erros do cliente
Definido emRFC 9110 §15.5.19
Pode ir para o cache por padrãoSó com Cache-Control ou Expires explícitos
Pode repetir o pedidoNão adianta; o servidor está recusando de propósito, geralmente de brincadeira
Cabeçalhos relevantesNenhum específico deste código
SituaçãoObsoleto: 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

Express (Node.js)
app.post('/brew', (req, res) => {
  res.status(418).json({ error: 'I\'m a teapot' });
});
Next.js App Router (route handler)
// app/brew/route.ts
export async function POST() {
  return Response.json({ error: 'I\'m a teapot' }, { status: 418 });
}
Go net/http
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"}`))
})
Python FastAPI
from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.post("/brew")
def brew():
    raise HTTPException(status_code=418, detail="I'm a teapot")
Nginx
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.