Tire de uma mensagem HTTP o corpo e a primeira linha, e o que sobra é o sistema nervoso inteiro do protocolo: os headers (cabeçalhos), linhas Nome: valor, com nomes que não diferenciam maiúsculas de minúsculas e valores que seguem a gramática própria de cada header. É nos headers que o cache, a autenticação, a negociação, o roteamento e a segurança acontecem de fato; o corpo é só o conteúdo transportado. Este artigo mostra a anatomia; o tradutor de requisições deixa você dissecar exemplos reais.

Os quatro papéis dos headers

O modelo mental mais claro separa os headers pelo que eles descrevem. Contexto da requisição: quem está pedindo e como, com Host, User-Agent, Referer (o erro de grafia virou padrão), Authorization, Cookie. Contexto da resposta: quem respondeu e em que termos, com Server, Set-Cookie, WWW-Authenticate, Retry-After. Metadados da representação: o que é o conteúdo transportado, seja qual for o sentido da mensagem, com Content-Type, Content-Length, Content-Encoding, Content-Language, ETag, Last-Modified. Negociação e condicionais: as preferências e as premissas do cliente, com a família Accept-*, que propõe formatos, codificações e idiomas, e a família If-* (If-None-Match, If-Modified-Since), que torna a requisição condicional para que os caches possam ganhar o seu 304.

O header que salvou o espaço de endereços da web

O Host merece um parágrafo só para ele. As requisições HTTP/1.0 informavam apenas o caminho, então um endereço IP correspondia a um único site. O HTTP/1.1 tornou o Host obrigatório, e com essa única linha nasceu a hospedagem virtual (virtual hosting): milhares de sites no mesmo endereço, com o servidor escolhendo qual site servir de acordo com o header. Todo reverse proxy, toda (rede de distribuição de conteúdo), todo ingress controller ainda roteia por ele (ou pelo seu equivalente no TLS, o ), e uma requisição cujo Host não bate com a URL é erro de configuração ou sondagem de ataque, e é por isso que esse caso está entre as primeiras coisas que qualquer (web application firewall) verifica.

End-to-end e hop-by-hop

A web é uma cadeia de intermediários, e os headers se dividem em duas classes. Os headers pertencem às pontas da conversa (o Content-Type, o Authorization, as diretivas de Cache-Control dirigidas a todos), e os intermediários são obrigados a repassá-los. Os headers hop-by-hop valem só para um trecho da cadeia (o Connection, o Keep-Alive, o Transfer-Encoding, o Upgrade, a autenticação de proxy), e cada hop (cada intermediário no caminho) consome e recria esses headers em vez de repassá-los. Os proxies vivem e morrem por essa divisão: repassar adiante um header hop-by-hop é ingrediente clássico de smuggling (o contrabando de requisições), e o header Connection existe, em parte, justamente para listar headers adicionais que precisam ser removidos naquele hop. Enquanto isso, os intermediários deixam o seu próprio rastro (o Via e a linhagem do X-Forwarded-For, hoje padronizada como Forwarded), e é assim que um backend descobre quem fez a chamada original, mesmo atrás de três camadas de infraestrutura.

Ordem, headers customizados e o fingerprint

Duas observações práticas completam a anatomia. Primeiro, os headers customizados: a convenção do prefixo X- foi oficialmente abandonada há anos (os experimentos nunca continuam sendo só experimentos: o X-Forwarded-For virou peça estrutural da infraestrutura), então os headers novos simplesmente recebem nomes honestos. Segundo, uma sutileza que este site transformou em ferramenta: a especificação diz que a ordem dos headers, em geral, não tem importância semântica, e por isso as implementações nunca combinaram uma ordem, e cada cliente envia a sua sequência característica. Navegadores, curl, Python e bots têm, cada um, uma assinatura reconhecível, o que faz da ordem dos headers um fingerprint (uma impressão digital): mais um exemplo da lição que sempre se repete, a de que tudo o que a especificação deixa livre as implementações acabam tornando identificável.

Fontes

Que o HTTP/1.0 não trazia o campo Host e que o HTTP/1.1 exige um é normativo em três documentos, um por versão do protocolo, e a hospedagem virtual decorre da exigência, não de convenção.