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.
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ília | Cabeçalhos típicos | Pergunta que respondem |
|---|---|---|
| Cache | Cache-Control, ETag, Age, X-Cache | Isto pode ser guardado, por quanto tempo, e foi um cache que respondeu? |
| Conteúdo | Content-Type, Content-Encoding, Content-Length | O que há no corpo e como ele está empacotado? |
| Segurança | Strict-Transport-Security, Content-Security-Policy | Quais proteções do navegador estão ligadas? |
| Cookies | Set-Cookie | O que o navegador deve lembrar? |
| Origem cruzada | Access-Control-Allow-Origin | Scripts de outros sites podem ler isto? |
| Conexão | Alt-Svc, Date, Keep-Alive | Como a ligação com o servidor é gerenciada? |
| Servidor e CDN | Server, Via, CF-RAY, X-Served-By | Qual software e qual rede responderam? |
| Diagnóstico | Server-Timing, X-Request-Id | Quanto 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
403numa 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
520a526vê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-ControleAge. Ummax-agelongo numa página HTML significa que os navegadores não vão perguntar de novo até ele acabar. UmX-CacheouCF-Cache-StatuscomHITsignifica que a CDN serviu a própria cópia e precisa de uma limpeza (purge). - “A compressão está ligada?”
- Procure
Content-Encoding: br,gzipouzstd. 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
Serverde 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 trazX-Redirect-Bycita a aplicação ou o plugin que o emitiu. - “O que este site está rodando?”
Server,X-Powered-ByeViamuitas 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.