Cabeçalhos HTTP: o guia completo de referência

Cabeçalhos HTTP são as linhas de informação que acompanham toda requisição e toda resposta na web. Eles não são o conteúdo da página — são o que descreve o conteúdo, quem está pedindo, e o que fazer com ele.

Você nunca os vê navegando, mas eles decidem coisas visíveis: se a página é cacheada, se o navegador confia no site, se um formulário de outro domínio pode enviar dados, e se uma imagem carrega ou não.

Este é o guia de referência: os principais cabeçalhos agrupados por função, os que todo site deveria enviar por segurança, os que vazam informação demais, e como ver os do seu site em dez segundos.

Resposta rápida
O que sãoLinhas de metadados que acompanham requisições e respostas
FormatoNome: valor, uma por linha
Quantos existemMais de 100 registrados, e qualquer um pode criar os seus
Como ver os do meu sitecurl -I https://seusite.com.br
Os mais importantesOs de segurança — e a maioria dos sites não envia nenhum

O que é um cabeçalho HTTP

Toda mensagem HTTP tem duas partes: os cabeçalhos e o corpo.

O corpo é o conteúdo — o HTML da página, a imagem, o JSON da API.

Os cabeçalhos são a informação sobre esse conteúdo — o que ele é, quanto ocupa, por quanto tempo pode ser guardado, quem está pedindo.

O formato é sempre o mesmo:

Nome-Do-Cabeçalho: valor

Uma por linha, e o nome não diferencia maiúsculas de minúsculasContent-Type e content-type são o mesmo cabeçalho.

Requisição e resposta usam cabeçalhos diferentes

Essa é a distinção que resolve metade da confusão.

Os cabeçalhos de requisição são enviados pelo navegador. Eles dizem quem está pedindo, o que aceita receber, e em que idioma.

Os cabeçalhos de resposta vêm do servidor. Eles descrevem o que está sendo entregue, por quanto tempo vale, e que regras de segurança aplicar.

⚠️ Alguns aparecem nos dois, como Content-Type — na requisição, descreve o que você está enviando; na resposta, o que está recebendo.

Como ver os cabeçalhos do seu site

Antes das tabelas, vale testar no seu próprio site — os cabeçalhos ficam muito mais concretos quando você vê os seus.

Pelo terminal, a forma mais rápida:

curl -I https://seusite.com.br

A opção -I pede apenas os cabeçalhos, sem baixar o conteúdo.

Pelo navegador, sem instalar nada: pressione F12, vá à aba Rede, recarregue a página e clique na primeira linha. Os cabeçalhos de requisição e de resposta aparecem separados.

E se quiser ver também os cabeçalhos que você envia:

curl -v https://seusite.com.br

As linhas com > são o que sai; as com < são o que volta.

Uma requisição real, do começo ao fim

Anatomia de uma requisição HTTP com os cabeçalhos enviados pelo navegador à esquerda e os devolvidos pelo servidor à direita, com destaque para o cabeçalho Host como o único obrigatório

É assim que a conversa acontece de verdade.

O navegador envia:

GET /contato HTTP/1.1 Host: exemplo.com.br User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: text/html,application/xhtml+xml Accept-Language: pt-BR,pt;q=0.9 Accept-Encoding: gzip, deflate, br Connection: keep-alive

E o servidor responde:

HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 4823 Content-Encoding: gzip Cache-Control: max-age=3600 Strict-Transport-Security: max-age=31536000 Date: Wed, 10 Sep 2026 14:22:03 GMT

⚠️ Repare no Host. Ele é o único cabeçalho obrigatório no HTTP/1.1 — e sem ele não existiria hospedagem compartilhada. Voltaremos a isso.

Cabeçalhos de identificação

Enviados pelo navegador, dizem quem está do outro lado.

Cabeçalho O que informa
HostQual site está sendo pedido. Obrigatório desde o HTTP/1.1
User-AgentNavegador, versão e sistema operacional
RefererDe qual página o visitante veio
Accept-LanguageIdiomas preferidos, em ordem
X-Forwarded-ForO IP real do visitante, quando há proxy ou CDN no caminho

Por que o Host mudou a internet

No HTTP/1.0, o cabeçalho não existia — e a consequência era grave: um endereço IP só podia servir um site.

O Host resolveu isso. Ao informar qual site está sendo pedido, ele permite que o servidor decida qual conteúdo entregar — e por isso um único IP hospeda centenas de domínios.

⚠️ A hospedagem compartilhada existe por causa desse cabeçalho. Sem ele, cada site precisaria de um IP próprio — e os endereços IPv4 teriam acabado décadas atrás.

E o Referer está escrito errado

Não é engano de digitação do artigo. A palavra correta em inglês é referrer, com dois erres — mas a especificação original, de 1996, saiu com um erre só.

Quando perceberam, já era tarde: corrigir quebraria todas as implementações existentes. O erro virou padrão, e está lá até hoje.

⚠️ Curiosamente, o cabeçalho moderno que controla seu comportamento — Referrer-Policy — usa a grafia correta. Os dois convivem.

Cabeçalhos de conteúdo

Descrevem o que está sendo enviado.

CabeçalhoO que informa
Content-TypeO tipo do conteúdo: text/html, image/png, application/json
Content-LengthO tamanho em bytes
Content-EncodingA compressão usada: gzip, br (Brotli)
Content-DispositionSe o arquivo deve ser exibido ou baixado
AcceptOs tipos que o navegador aceita receber

⚠️ O Content-Type é mais importante do que parece. Se ele estiver errado, o navegador pode exibir código-fonte em vez da página, ou baixar um arquivo que deveria abrir. E o charset=UTF-8 nele é o que faz os acentos aparecerem corretamente. Quando os acentos aparecem errados apesar do cabeçalho correto, o problema está na página ou no banco — nosso guia sobre caracteres especiais e acentos em HTML cobre os dois casos.

O Content-Disposition tem um uso prático: attachment; filename="relatorio.pdf" força o download em vez da exibição — útil em área de arquivos.

Cabeçalhos de cache

As seis diretivas do Cache-Control e o que cada uma faz, com destaque para a diferença entre no-cache, que manda revalidar, e no-store, que proíbe o armazenamento

São os que mais afetam a velocidade do site, e os menos configurados.

CabeçalhoO que faz
Cache-ControlDefine as regras de cache. O principal
ETagUma “impressão digital” do arquivo, para verificar se mudou
Last-ModifiedA data da última alteração
ExpiresData de validade — formato antigo, substituído pelo Cache-Control
AgeHá quanto tempo a resposta está no cache de um intermediário

Cache-Control em detalhe

As diretivas mais usadas:

max-age=3600 — pode guardar por 3.600 segundos, ou uma hora.

public — qualquer cache pode guardar, incluindo CDNs e proxies.

private — só o navegador do visitante. Use para páginas com dados de conta.

no-store — não guarde em lugar nenhum, nunca.

immutable — o arquivo nunca muda; nem revalide.

⚠️ E a confusão mais comum do HTTP inteiro: no-cache não significa “não cacheie”.

Ele significa “guarde, mas revalide antes de usar”. O navegador armazena a resposta e, na próxima visita, pergunta ao servidor se ela ainda vale — se sim, recebe um 304 Not Modified e usa a cópia local.

Quem quer proibir o armazenamento usa no-store. São coisas diferentes, e trocá-las é o erro mais frequente em configuração de cache.

Nosso guia sobre cache explica como as camadas se encaixam.

Cabeçalhos de segurança

Esta é a seção mais acionável do artigo — e a maioria dos sites não envia nenhum deles.

Cabeçalho O que previne
Strict-Transport-SecurityObriga o navegador a usar sempre HTTPS, mesmo se digitarem http://
Content-Security-PolicyDefine quais scripts e recursos podem carregar. Barra ataques de XSS
X-Frame-OptionsImpede que seu site seja exibido dentro de um iframe alheio (clickjacking)
X-Content-Type-OptionsImpede o navegador de adivinhar o tipo do arquivo e executá-lo errado
Referrer-PolicyControla quanta informação sobre a origem do visitante é repassada
Permissions-PolicyDefine quais recursos do dispositivo a página pode usar — câmera, microfone, localização

O conjunto mínimo, pronto para copiar

No .htaccess de um servidor Apache ou LiteSpeed:

<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set Referrer-Policy "strict-origin-when-cross-origin" </IfModule>

⚠️ Quatro cuidados antes de aplicar:

O Strict-Transport-Security só deve ser ativado com HTTPS funcionando em todo o site. Depois de enviado, o navegador se recusa a acessar por HTTP pelo tempo definido — e um ano é bastante tempo se algo der errado. Comece com max-age=300 e aumente depois de confirmar.

O includeSubDomains estende a regra a todos os subdomínios — inclusive os que você esqueceu que existem.

O X-Frame-Options: SAMEORIGIN permite iframe apenas do próprio site. Se você embute o seu conteúdo em outro domínio, isso quebra.

E o Content-Security-Policy não está na lista de propósito. Ele é o mais poderoso e o mais fácil de configurar errado — um CSP mal escrito quebra o site inteiro. Vale estudar antes de aplicar.

Como testar o resultado

Ferramentas gratuitas avaliam os cabeçalhos do seu site e dão uma nota. O securityheaders.com é o mais usado — cola a URL e ele lista o que falta.

Cabeçalhos de autenticação e sessão

CabeçalhoO que faz
AuthorizationEnvia as credenciais: Bearer token, Basic usuário:senha
WWW-AuthenticateO servidor informa qual autenticação espera. Acompanha todo erro 401
CookieO navegador devolve os cookies que recebeu
Set-CookieO servidor define um cookie no navegador

⚠️ E aqui está a causa mais comum do erro 431 Request Header Fields Too Large: cookies acumulados.

Cada cookie definido no domínio é reenviado em toda requisição. Um site com muitos plugins, ferramentas de análise e testes A/B pode acumular dezenas — e quando o total ultrapassa o limite do servidor, geralmente 8 KB, as requisições passam a falhar.

A solução é limpar os cookies do domínio, e do lado do servidor, revisar o que está sendo definido.

Cabeçalhos de CORS

CORS resolve um problema específico: por padrão, o navegador bloqueia requisições de um domínio para outro. É uma proteção — sem ela, qualquer site poderia ler dados da sua conta em outro.

Os cabeçalhos de CORS são como o servidor autoriza exceções.

CabeçalhoO que faz
Access-Control-Allow-OriginQuais domínios podem acessar. O principal
Access-Control-Allow-MethodsQuais métodos são permitidos
Access-Control-Allow-HeadersQuais cabeçalhos o cliente pode enviar
Access-Control-Allow-CredentialsSe cookies podem ser enviados junto

⚠️ Access-Control-Allow-Origin: * libera para qualquer domínio. É conveniente e quase sempre errado — especifique os domínios que precisam de acesso.

Os cabeçalhos que vazam informação

Alguns servidores anunciam mais do que deveriam.

Server: Apache/2.4.41 (Ubuntu) X-Powered-By: PHP/7.4.3

Essas duas linhas informam a versão exata do servidor e do PHP. Para quem procura alvos, é meio caminho andado — basta cruzar com a lista de vulnerabilidades conhecidas daquelas versões.

Como reduzir:

No Apache, ServerTokens Prod e ServerSignature Off.
No PHP, expose_php = Off no php.ini.
E no .htaccess, Header unset X-Powered-By.

⚠️ Isso não substitui manter tudo atualizado — é uma camada a menos de informação para quem varre a internet procurando versões vulneráveis. Manter atualizado continua sendo o que importa.

O prefixo X- e por que ele foi abandonado

Você vai encontrar muitos cabeçalhos começando com X-X-Frame-Options, X-Forwarded-For, X-Powered-By.

A convenção era essa: cabeçalhos não oficiais deveriam usar o prefixo, para se distinguirem dos padronizados.

O problema apareceu na prática. Vários X- viraram tão usados que foram padronizados — e aí ficaram com um prefixo dizendo que não eram padrão. Renomear quebraria tudo.

⚠️ Em 2012, a RFC 6648 desaconselhou formalmente o prefixo. Mas os que já existiam ficaram, e continuam em uso.

Se você for criar um cabeçalho personalizado hoje, use um nome descritivo sem o X- — algo como Minha-Empresa-Versao.

Cabeçalhos e HTTP/3

No HTTP/1.1, os cabeçalhos são texto puro — é por isso que você consegue lê-los diretamente numa conexão.

No HTTP/2 e no HTTP/3, eles são comprimidos por HPACK e QPACK respectivamente. A economia é significativa: cabeçalhos repetidos entre requisições são enviados apenas uma vez.

Na prática, nada muda para você. O navegador e o servidor cuidam da compressão, e as ferramentas exibem os cabeçalhos já descomprimidos.

⚠️ Um detalhe visível: no HTTP/2 e HTTP/3, os nomes dos cabeçalhos são sempre minúsculos. Se você vir content-type em vez de Content-Type no DevTools, é sinal de que a conexão está usando uma dessas versões.

Um .htaccess mal escrito derruba o site inteiro

Editar cabeçalhos exige acesso ao arquivo de configuração — e um erro de sintaxe ali gera erro 500 em todas as páginas. Na Homehost você tem gerenciador de arquivos com backup antes de editar, logs de erro à mão, e suporte em português quando algo não sobe. Servidores no Brasil, a partir de R$ 7,90/mês.

Ver planos de hospedagem

Perguntas frequentes

O que são cabeçalhos HTTP?

São linhas de informação que acompanham toda requisição e resposta na web, no formato Nome: valor. Eles não contêm o conteúdo da página — descrevem o conteúdo, quem está pedindo, e as regras a aplicar: cache, segurança, tipo de arquivo e autenticação.

Como ver os cabeçalhos de um site?

Pelo terminal, com curl -I https://seusite.com.br, que mostra apenas os cabeçalhos de resposta. Ou pelo navegador: F12, aba Rede, recarregar a página e clicar na primeira linha. Para ver também o que você envia, use curl -v — as linhas com > são a requisição e as com < a resposta.

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

Os de requisição vêm do navegador e dizem quem está pedindo, o que aceita receber e em que idioma. Os de resposta vêm do servidor e descrevem o que está sendo entregue, por quanto tempo vale e que regras de segurança aplicar. Alguns, como o Content-Type, aparecem nos dois com significados espelhados.

Quais cabeçalhos de segurança devo usar?

Quatro cobrem a maioria dos casos: Strict-Transport-Security para forçar HTTPS, X-Content-Type-Options: nosniff para impedir que o navegador adivinhe tipos de arquivo, X-Frame-Options: SAMEORIGIN contra clickjacking, e Referrer-Policy para controlar o que é repassado. O Content-Security-Policy é o mais poderoso, e o mais fácil de configurar errado.

Qual a diferença entre no-cache e no-store?

no-cache não significa “não cacheie”. Ele manda guardar a resposta e revalidar com o servidor antes de usá-la. Já no-store proíbe o armazenamento em qualquer lugar. Trocar um pelo outro é o erro mais comum em configuração de cache.

Por que o cabeçalho Referer está escrito errado?

Porque a especificação original, de 1996, saiu com um erre em vez de dois — a grafia correta em inglês é referrer. Quando o erro foi percebido, corrigi-lo quebraria as implementações existentes, e ele virou padrão. Curiosamente, o cabeçalho moderno Referrer-Policy usa a grafia certa, e os dois convivem.

O que é o cabeçalho Host e por que ele importa?

Ele informa qual site está sendo pedido, e é o único obrigatório no HTTP/1.1. Sem ele, um endereço IP só poderia servir um site — e é por causa desse cabeçalho que a hospedagem compartilhada existe, com centenas de domínios num mesmo IP.

Por que aparece o erro 431 no meu site?

Porque os cabeçalhos ultrapassaram o limite do servidor, geralmente 8 KB. A causa quase sempre é cookie acumulado: cada cookie do domínio é reenviado em toda requisição, e sites com muitos plugins e ferramentas de análise acumulam dezenas. Limpar os cookies do domínio resolve para o visitante; do lado do servidor, vale revisar o que está sendo definido.

Devo esconder o cabeçalho Server?

É uma boa prática. Ele e o X-Powered-By informam a versão exata do servidor e do PHP, o que facilita para quem varre a internet procurando versões vulneráveis. Mas esconder não substitui atualizar — é uma camada a menos de informação, não uma proteção.

O que significa o prefixo X- nos cabeçalhos?

Era a convenção para cabeçalhos não oficiais. Ela foi desaconselhada pela RFC 6648, em 2012, porque vários X- acabaram padronizados e ficaram com um prefixo dizendo que não eram padrão. Os antigos continuam em uso; para criar um novo hoje, use um nome descritivo sem o prefixo.

Posso criar meus próprios cabeçalhos?

Pode. Qualquer aplicação pode definir cabeçalhos personalizados, e é comum em APIs para versionamento, chaves e identificadores de requisição. Use um nome descritivo e específico, para não conflitar com nenhum padrão presente ou futuro.

Os cabeçalhos mudam no HTTP/2 e HTTP/3?

O conteúdo não; a forma de transmitir sim. No HTTP/1.1 eles são texto puro; nas versões seguintes são comprimidos por HPACK e QPACK. Um detalhe visível: no HTTP/2 e HTTP/3 os nomes são sempre minúsculos — se você vir content-type em vez de Content-Type no DevTools, a conexão está usando uma dessas versões.

Conclusão

Cabeçalhos HTTP são a parte da web que ninguém vê e que decide quase tudo: se a página é guardada em cache, se o navegador confia no site, se os acentos aparecem certos, e se um script de outro domínio pode rodar na sua página.

Três coisas ficam deste guia. Os cabeçalhos de segurança são os mais importantes e os menos usados — quatro linhas no .htaccess cobrem a maior parte do risco. O no-cache não proíbe o cache — quem proíbe é o no-store, e confundir os dois é o erro mais comum da área. E o Host é o cabeçalho que tornou a hospedagem compartilhada possível.

E o teste que confirma tudo cabe numa linha:

curl -I https://seusite.com.br

Rode no seu site agora. O que aparecer ali é o que todo visitante recebe — e provavelmente há duas ou três linhas de segurança faltando.

Este artigo foi útil?

Obrigado pela resposta!
Picture of Gustavo Gallas

Gustavo Gallas

Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do Bóris, seu pet de estimação. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos técnicos.

Contato: gustavo.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!