Visualizador de cabeçalhos de resposta

Digite um endereço e leia o que o servidor diz antes de mandar a página: a linha de status e cada cabeçalho, em cada redirecionamento do caminho. Uma nota curta ao lado de cada cabeçalho diz o que ele está fazendo ali.

Qualquer endereço público http:// ou https://. Sem esquema, usamos HTTPS.

Ou experimente github.com, wikipedia.org

A parte de uma página web que você nunca vê

Uma resposta de um servidor web é montada como uma encomenda. A página é o que está dentro da caixa. Do lado de fora há uma etiqueta, formada por uma primeira linha com um código de status de três dígitos e depois uma lista de linhas Name: value chamadas cabeçalhos (headers). O navegador lê a etiqueta primeiro e decide quase tudo a partir dela: se exibe ou baixa, se guarda uma cópia, se vai para outro lugar, quais cookies armazena.

Você nunca vê os cabeçalhos na tela, então muito comportamento estranho se esconde neles. Uma página que não atualiza, um redirecionamento em loop, uma fonte bloqueada em outro domínio, um login que não fica salvo. Na maioria das vezes, é um cabeçalho com o valor errado.

O que este visualizador faz

Nosso servidor envia uma requisição GET ao endereço que você digita, do mesmo tipo que um navegador envia, e registra a resposta. Se a resposta for um redirecionamento (um status 3xx com um cabeçalho Location), ele requisita o novo endereço e registra essa resposta também, até oito vezes. Você recebe um bloco por resposta, em ordem, para ver qual servidor acrescentou qual cabeçalho em qual etapa.

Procuramos cada cabeçalho num dicionário de mais de 130 nomes e o mostramos com a família dele e uma explicação de uma frase. As famílias são:

FamíliaCabeçalhos típicosPergunta que respondem
CacheCache-Control, ETag, Age, X-CacheIsto pode ser guardado, por quanto tempo, e foi um cache que respondeu?
ConteúdoContent-Type, Content-Encoding, Content-LengthO que há no corpo e como ele está empacotado?
SegurançaStrict-Transport-Security, Content-Security-PolicyQuais proteções do navegador estão ligadas?
CookiesSet-CookieO que o navegador deve lembrar?
Origem cruzadaAccess-Control-Allow-OriginScripts de outros sites podem ler isto?
ConexãoAlt-Svc, Date, Keep-AliveComo a ligação com o servidor é gerenciada?
Servidor e CDNServer, Via, CF-RAY, X-Served-ByQual software e qual rede responderam?
DiagnósticoServer-Timing, X-Request-IdQuanto tempo levou, e como achar isso nos logs?

Um nome que não está no dicionário é marcado como cabeçalho personalizado ou incomum. Qualquer software pode inventar os seus, então você vai ver muito essa marcação e ela é inofensiva. Durações e tamanhos são convertidos quando ajuda, então max-age=31536000 aparece como 365 dias.

O resumo traz o status final, a versão HTTP que nosso servidor negociou, o número de redirecionamentos, o software citado pelo cabeçalho Server e o número de cabeçalhos na última resposta. Nada recebe nota aqui. Se você quer uma nota, a nota dos cabeçalhos de segurança dá uma.

Lendo a linha de status

  • 2xx: a requisição deu certo. 200 é o caso comum.
  • 301 e 308: mudou de vez. Navegadores e buscadores memorizam o novo endereço. 302, 303 e 307: vá para lá por enquanto e mantenha o original como referência.
  • 4xx: o servidor recusa, ou não encontra o que foi pedido. Um 403 numa página que abre normalmente no seu navegador muitas vezes quer dizer que o site bloqueia requisições automáticas.
  • 5xx: o próprio servidor falhou. Os códigos de 520 a 526 vêm de uma CDN que não conseguiu alcançar o servidor por trás dela.

Quatro coisas que as pessoas verificam com ele

“Por que os visitantes ainda recebem a versão antiga?”
Leia Cache-Control e Age. Um max-age longo numa página HTML significa que os navegadores não vão perguntar de novo até ele acabar. Um X-Cache ou CF-Cache-Status com HIT significa que a CDN serviu a própria cópia e precisa de uma limpeza (purge).
“A compressão está ligada?”
Procure Content-Encoding: br, gzip ou zstd. Se o cabeçalho falta numa página HTML, a página viaja no tamanho cheio.
“De onde vem este redirecionamento?”
Compare o cabeçalho Server de cada etapa. Um redirecionamento respondido pela CDN foi configurado no painel dela. Um respondido pelo nginx ou pelo Apache está na configuração do servidor. Um que traz X-Redirect-By cita a aplicação ou o plugin que o emitiu.
“O que este site está rodando?”
Server, X-Powered-By e Via muitas vezes citam o servidor web, a linguagem e a CDN. No seu próprio site, vale a pena tirar os números de versão desses cabeçalhos.

Você está vendo os cabeçalhos que nosso servidor recebeu numa requisição anônima. Um site pode responder diferente a um visitante logado, a um navegador de celular, a outro país ou a outro Accept-Language. Os nomes dos cabeçalhos aparecem na grafia de costume. HTTP/2 e HTTP/3 os transmitem em minúsculas, como mostra o bloco bruto, e maiúsculas e minúsculas nunca fazem diferença.

Perguntas frequentes

Como vejo os cabeçalhos de resposta no meu próprio navegador?

Abra as ferramentas de desenvolvedor (F12, ou Cmd+Option+I no Mac), vá até a aba Rede (Network), recarregue a página e clique na primeira requisição. O painel Cabeçalhos (Headers) mostra as mesmas linhas. Este visualizador serve para quando você não pode fazer isso: no celular, para um link que você prefere não abrir ou para ver a resposta dada a um cliente sem cookies.

Qual é a diferença entre cabeçalhos de requisição e cabeçalhos de resposta?

Os cabeçalhos de requisição saem com a pergunta do navegador: qual página, quais idiomas e formatos ele aceita, quais cookies ele tem. Os cabeçalhos de resposta voltam do servidor com a resposta. Esta página só mostra cabeçalhos de resposta.

Os cabeçalhos X- são padrão?

O prefixo X- era uma convenção para cabeçalhos não oficiais. Alguns viraram universais mesmo assim, como X-Frame-Options e X-Content-Type-Options. A convenção foi aposentada em 2012, então cabeçalhos personalizados mais novos muitas vezes não têm prefixo nenhum.

Por que recebo cabeçalhos diferentes dos que o meu navegador mostra?

Porque não é a mesma requisição. Servidores e CDNs se adaptam ao user agent, aos cookies, ao idioma e à localização do cliente, e uma cópia em cache pode trazer cabeçalhos produzidos horas antes. O cabeçalho Vary lista quais cabeçalhos de requisição o servidor leva em conta.

Devo esconder os cabeçalhos Server e X-Powered-By?

Esconder o nome do produto muda pouco. Já tirar os números de versão vale os dois minutos, porque scanners automáticos os usam para escolher quais falhas conhecidas tentar. No nginx use server_tokens off;, no Apache ServerTokens Prod, no PHP expose_php = Off.

Um cabeçalho faltando quer dizer que há algo errado?

Normalmente não. Content-Type é o único esperado em quase toda resposta com corpo. Os outros importam conforme o que você quer. Sem Cache-Control, o cache fica a critério de cada navegador, e sem cabeçalhos de segurança as proteções opcionais ficam desligadas.