O que são cabeçalhos HTTP? Os mais comuns, explicados

Publicado:

17 min de leitura

Acar Diveroli
Autor: Acar Diveroli
Folhas isométricas REQUEST e RESPONSE voam em pares na diagonal com Host, User-Agent, Content-Type; um REQUEST é azul

Você abre uma loja online e ela aparece no seu idioma, mantém você logado e carrega rápido a partir de um cache. Nada disso foi decidido pela página em si. Antes que a primeira linha dela chegue, o seu navegador e o servidor trocam uma dúzia de linhas curtas sobre quem está pedindo, o que é aceito e o que vai voltar. Essas linhas são os cabeçalhos HTTP.

Este artigo mostra uma requisição e uma resposta reais capturadas com o curl, os cabeçalhos que você mais vai encontrar, se os nomes diferenciam maiúsculas de minúsculas e como ler os cabeçalhos no Chrome e com o curl. No fim vêm os cabeçalhos de segurança para donos de sites, os cabeçalhos que um proxy adiciona ou lê e seis perguntas frequentes.

O que são cabeçalhos HTTP?

Cabeçalhos HTTP são informações extras, cada uma com um nome, que acompanham uma requisição ou uma resposta e vêm antes do conteúdo em si. A RFC 9110, o padrão que define o HTTP, chama os campos enviados antes do conteúdo de "header fields", ou simplesmente headers (cabeçalhos). Cada cabeçalho é uma linha com um nome, dois-pontos e um valor, como Accept-Language: pt-BR.

Toda mensagem HTTP tem o mesmo formato: uma primeira linha, os cabeçalhos, uma linha em branco e, se houver, o corpo. Na requisição, a primeira linha traz o método e o caminho (GET /); na resposta, o código de status (200 OK). O corpo é a página, a imagem ou os dados; os cabeçalhos descrevem o corpo e os dois lados da troca.

Os cabeçalhos de requisição vão do seu navegador ou app para o servidor, e os de resposta fazem o caminho de volta. A referência de cabeçalhos HTTP do MDN lista todos os cabeçalhos padrão, organizados por grupo. Nomes que começam com X- são extensões caseiras; esse hábito de nomeação foi desaconselhado oficialmente em 2012, mas muitos desses nomes continuam em uso.

Como funcionam os cabeçalhos em uma requisição e uma resposta?

Carregar uma página envolve uma requisição e uma resposta, cada uma com os próprios cabeçalhos:

  1. O seu navegador se conecta ao servidor. Em um endereço https://, ele configura a criptografia primeiro.
  2. Ele envia a linha de requisição e os cabeçalhos de requisição: GET /, depois Host, User-Agent, Accept, Accept-Language e os cookies que tiver salvos para aquele site.
  3. Uma linha em branco encerra os cabeçalhos. Um formulário ou uma chamada de API acrescenta um corpo depois dela.
  4. O servidor lê os cabeçalhos: Host escolhe o site, Accept-Language o idioma, Cookie o usuário logado.
  5. Ele responde com uma linha de status e cabeçalhos de resposta, como 200 OK e Content-Type, seguidos de uma linha em branco e do corpo.
  6. O navegador age de acordo: exibe a página, guarda os cookies, armazena uma cópia em cache ou segue um redirecionamento.

Como são uma requisição e uma resposta HTTP de verdade?

Veja uma troca com example.com feita com curl -v. O curl é uma ferramenta de linha de comando que busca endereços da web e já vem no Windows 10 e 11, no macOS e na maioria dos sistemas Linux; -v (verbose, detalhado) mostra os dois lados. Rodamos o comando no Windows 11 em 15 de novembro de 2026 e reduzimos a saída aos cabeçalhos:

text
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/8.22.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 15 Nov 2026 15:40:29 GMT
< Content-Type: text/html; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Server: cloudflare
< last-modified: Thu, 12 Nov 2026 21:56:22 GMT
< allow: GET, HEAD
< Accept-Ranges: bytes
< Age: 6679
< cf-cache-status: HIT
< alt-svc: h3=":443"; ma=86400

As linhas que começam com > são o que o curl enviou; as que começam com <, o que o servidor respondeu. O > sozinho é a linha em branco que encerra os cabeçalhos de requisição. O curl envia três cabeçalhos de requisição; um navegador, mais de dez.

  • Content-Type: text/html; charset=utf-8: o corpo é uma página web em texto UTF-8.
  • Age: 6679: a rede de distribuição de conteúdo (CDN) na frente do site guarda esta cópia há 6.679 segundos, cerca de 1 hora e 51 minutos.
  • cf-cache-status: HIT: não é um cabeçalho padrão, e sim uma anotação da própria rede dizendo que a cópia veio do cache dela.
  • alt-svc: h3=":443": o site também fala HTTP/3 na porta 443.

Repare em Content-Type ao lado de last-modified: uma única resposta, dois jeitos de escrever os nomes.

Os cabeçalhos HTTP diferenciam maiúsculas de minúsculas?

Não, os nomes dos cabeçalhos não diferenciam maiúsculas de minúsculas: Content-Type, content-type e CONTENT-TYPE são o mesmo cabeçalho. A RFC 9110 diz isso em uma linha: "Field names are case-insensitive." Quando pedimos a mesma página por http:// simples, sem criptografia, o servidor chegou a escrever Last-Modified e Allow com inicial maiúscula.

Os valores seguem as regras de cada cabeçalho. text/html e TEXT/HTML indicam o mesmo tipo de arquivo, mas o valor de um cookie ou de um token de login precisa voltar exatamente como o servidor o enviou.

O HTTP/2 e o HTTP/3, as versões mais novas do protocolo, exigem nomes em minúsculas, e é por isso que o DevTools do Chrome mostra content-type. No nosso teste, o Chromium carregou example.com por HTTP/3, e a requisição dele começou com :method, :path, :scheme e :authority. Esses pseudocabeçalhos levam o que o HTTP/1.1 coloca na primeira linha e no cabeçalho Host.

No seu código, compare os nomes dos cabeçalhos sem levar em conta maiúsculas e minúsculas. O objeto Headers do JavaScript e a biblioteca requests do Python já fazem isso; um dicionário comum, não.

Quais são os cabeçalhos de requisição mais comuns?

Os cabeçalhos de requisição descrevem quem está pedindo e o que aceita:

CabeçalhoO que diz ao servidorValor de exemplo
HostQual site você querexample.com
User-AgentNavegador ou app e a versão delecurl/8.22.0
AcceptTipos de arquivo que você consegue usartext/html
Accept-LanguageIdiomas da sua preferênciapt-BR,pt;q=0.9
CookieCookies salvos para este sitetheme=dark
AuthorizationLogin no site ou na APIBearer <token>
RefererPágina de onde você veiohttps://example.com/

Graças ao Host, um servidor com um único endereço IP pode hospedar muitos sites: ele lê o nome e escolhe o site certo. É pelo Accept-Language que um site escolhe um idioma antes de você escolher um; os números q são pesos de 0 a 1, então pt-BR,pt;q=0.9 quer dizer português do Brasil primeiro e qualquer variante de português em segundo lugar.

Cookie leva de volta os pequenos valores que um site guardou antes com Set-Cookie, como o ID de uma sessão de login. O que são cookies e para que servem? mostra essa troca passo a passo.

Authorization leva credenciais para o próprio site, muitas vezes depois de uma resposta 401 Unauthorized; o padrão proíbe que um proxy o altere. Referer, escrito errado no padrão, indica a página cujo link trouxe você até aqui; em um link para outro site, os navegadores enviam por padrão só a origem, como https://example.com/. O Chrome também envia cabeçalhos próprios, como sec-ch-ua, uma lista curta de marcas e versões do navegador.

Quais são os cabeçalhos de resposta mais comuns?

Os cabeçalhos de resposta dizem ao navegador o que ele recebeu e o que fazer com isso:

CabeçalhoO que diz ao navegadorValor de exemplo
Content-TypeTipo de arquivo que está no corpoapplication/json
Cache-ControlSe e por quanto tempo guardar em cachemax-age=3600
Set-CookieUm cookie para guardartheme=dark; Secure
LocationEndereço para onde ir em seguida/login
Retry-AfterQuanto tempo esperar120
Strict-Transport-SecurityUsar só HTTPS daqui em diantemax-age=31536000

Content-Type decide o que o navegador faz com o corpo: renderizar text/html como página, exibir image/png como imagem, entregar application/json a um script. Um valor errado é o motivo de uma página às vezes aparecer como código cru. Já Content-Disposition: attachment pede ao navegador que baixe o arquivo.

Cache-Control define as regras de cache: max-age=3600 permite reutilizar a cópia por uma hora, e no-store proíbe guardar qualquer cópia. Set-Cookie pode aparecer várias vezes na mesma resposta, uma linha por cookie. Location vem com os redirecionamentos (os códigos 3xx) e informa o novo endereço.

Retry-After vem com 503 Service Unavailable e 429 Too Many Requests e diz quanto tempo esperar, em segundos ou como uma data. Retry-After: 120 significa dois minutos; um cliente bem-comportado espera esse tempo.

Como ver os cabeçalhos HTTP no Chrome?

O Chrome mostra cada cabeçalho de cada requisição nas suas ferramentas para desenvolvedores, o DevTools, no painel Rede. Com os nomes da interface em português:

  1. Abra a página e pressione F12, ou Ctrl + Shift + I no Windows (Cmd + Option + I no Mac). Também dá para clicar com o botão direito na página e escolher Inspecionar.
  2. Clique na guia Rede. O DevTools só registra enquanto está aberto, então recarregue a página.
  3. Na coluna Nome, clique na primeira linha, que é a própria página.
  4. Abra a guia Cabeçalhos. Geral mostra o endereço, o método e o código de status; abaixo vêm Cabeçalhos de resposta e Cabeçalhos de solicitação.
  5. Marque Bruto ao lado de uma seção para ver as linhas como chegaram, na ordem original.

Se aparecer o aviso "São exibidos cabeçalhos de provisionamento", o arquivo provavelmente veio do cache do navegador; marque Desativar cache no topo do painel e recarregue. A referência do painel Rede do Chrome explica as outras opções, como exibir um cabeçalho em uma coluna própria.

Para repetir uma requisição fora do navegador, clique nela com o botão direito e escolha Copiar > Copiar como cURL (cmd) no Windows, ou Copiar como cURL no Mac. O comando inclui os seus cookies e qualquer cabeçalho de login, então nunca o cole em um fórum ou chat público.

Como ver os cabeçalhos HTTP com o curl?

O curl mostra os cabeçalhos na linha de comando, o que ajuda a conferir o seu próprio site. Digite os comandos no Prompt de Comando; no Windows PowerShell, digite curl.exe, porque lá curl é o nome de outro comando.

cmd
curl -I https://example.com

-I pede apenas os cabeçalhos de resposta, com uma requisição HEAD; no nosso teste, ele mostrou os mesmos cabeçalhos de resposta vistos acima. Outras duas opções:

  • curl -v https://example.com mostra os cabeçalhos de requisição, os de resposta e os detalhes da conexão.
  • curl -I -H "Accept-Language: de" https://example.com acrescenta um cabeçalho seu, por exemplo para testar como o seu site responde a um navegador configurado em alemão.

O curl que vem no Windows fala HTTP/1.1 (a saída detalhada diz ALPN: curl offers http/1.1), então você vê os nomes do jeito que o servidor os escreveu. Uma versão do curl compilada com suporte a HTTP/2 mostra os nomes em minúsculas nos sites que falam HTTP/2.

Quais cabeçalhos de segurança um site deve enviar?

Cabeçalhos de segurança são cabeçalhos de resposta que ativam proteções extras do navegador para o seu site. Você os configura no servidor web, na rede de distribuição de conteúdo ou na própria aplicação:

  • Strict-Transport-Security (HSTS): usar só HTTPS neste site por max-age segundos. Os navegadores ignoram esse cabeçalho quando ele chega por HTTP sem criptografia. Acrescente includeSubDomains só quando todos os subdomínios funcionarem com HTTPS.
  • Content-Security-Policy (CSP): lista de onde a página pode carregar scripts, estilos e imagens, o que limita o que um script injetado consegue fazer.
  • X-Content-Type-Options: nosniff: o navegador confia no Content-Type em vez de tentar adivinhar o tipo de arquivo.
  • X-Frame-Options, ou frame-ancestors na CSP: se outros sites podem mostrar a sua página dentro de um quadro (frame), uma defesa contra clickjacking (enganar o visitante para que clique em uma página escondida).
  • Referrer-Policy: quanto do endereço da sua página vai para o Referer quando os visitantes saem.

Confira o seu site com curl -I ou em Cabeçalhos de resposta no DevTools. Nos cookies de login, os atributos Secure, HttpOnly e SameSite dentro do Set-Cookie importam na mesma medida.

Quais cabeçalhos um proxy adiciona ou lê?

Um proxy trabalha com alguns cabeçalhos próprios: alguns ele lê da sua requisição, outros ele pode adicionar antes de repassá-la.

  • Proxy-Authorization leva o seu login do proxy, como user:pass, até o proxy, que o consome em vez de repassá-lo ao site.
  • Proxy-Authenticate vem com a resposta 407 Proxy Authentication Required do proxy quando o login falta ou está errado.
  • Via registra que um intermediário tratou a mensagem; o padrão HTTP diz que um proxy precisa adicioná-lo.
  • X-Forwarded-For e a sua forma padronizada, Forwarded, levam o endereço IP original do cliente. A RFC 7239, que define o Forwarded, diz que um proxy feito para oferecer anonimato não vai usá-lo.

É o fato de um proxy adicionar ou não Via ou X-Forwarded-For que separa os proxies em transparentes, anônimos e elite; Proxy transparente, anônimo e elite: qual é a diferença? mostra a mesma requisição nos três níveis.

Com HTTPS, quase tudo isso desaparece. Para um endereço https://, o seu app pede ao proxy que abra um túnel com CONNECT, e daí em diante o proxy repassa bytes criptografados sem lê-los. Rodamos o curl por um pequeno proxy de teste no nosso próprio computador, com o login de exemplo user:pass:

text
> CONNECT example.com:443 HTTP/1.1
> Host: example.com:443
> Proxy-Authorization: Basic dXNlcjpwYXNz
> User-Agent: curl/8.22.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/8.22.0
> Accept: */*

O log do proxy registrou só o primeiro bloco. A requisição GET e os cabeçalhos dela viajaram dentro do túnel criptografado, então o proxy não conseguiu nem lê-los nem acrescentar linhas. dXNlcjpwYXNz é simplesmente user:pass em Base64, uma codificação, e não uma criptografia.

É assim que os Proxies HTTPS transportam o seu tráfego: o gateway da Proxynet repassa o túnel sem descriptografá-lo, então você não instala nenhum certificado nosso. Um proxy muda o endereço IP que o site vê; isso não é motivo para reescrever os seus próprios cabeçalhos. Não altere User-Agent, Referer ou X-Forwarded-For para se passar por outro navegador ou outro visitante; os scripts que você roda devem enviar um User-Agent honesto, com o nome da sua ferramenta.

Onde você encontra cabeçalhos HTTP

  • Versões por idioma: um site lê Accept-Language para escolher a primeira página que você vê.
  • Login: o cabeçalho Cookie leva a sua sessão em cada requisição.
  • APIs: um token em Authorization, Content-Type: application/json para o corpo.
  • Cache: Cache-Control e Age decidem se uma cópia guardada ainda está atual.
  • Downloads: Content-Disposition decide se um arquivo é aberto ou salvo.

Erros comuns

  • Ler nomes de cabeçalhos diferenciando maiúsculas de minúsculas no código. headers["Content-Type"] em um dicionário comum não encontra o content-type vindo de um servidor HTTP/2.
  • Compartilhar um comando "Copiar como cURL". Ele leva os seus cookies, então qualquer pessoa que o tenha pode agir em seu nome.
  • Confiar em um X-Forwarded-For vindo da internet. Um cliente pode enviar qualquer valor; só são confiáveis as entradas adicionadas pelo seu próprio proxy ou balanceador de carga (o servidor que distribui o tráfego entre os seus servidores).
  • Ativar o HSTS com includeSubDomains cedo demais. Um subdomínio sem HTTPS fica inacessível para os visitantes que já viram o cabeçalho.
  • Deixar os cookies se acumularem. Cookies grandes levam a requisição além do limite de cabeçalhos do servidor, e o site responde 400 ou 431.

Guia de decisão

O que você querOnde olhar ou o que usar
Ver o que o seu navegador enviaDevTools > Rede > Cabeçalhos
Conferir rápido a resposta de um sitecurl -I
Descobrir para onde vai um redirecionamentoLocation na resposta
Entender por que uma página abre em outro idiomaAccept-Language na requisição
Proteger melhor o seu próprio siteHSTS, CSP, nosniff, Referrer-Policy
Fazer login em um proxyProxy-Authorization, definido pelo seu app

Perguntas frequentes

O que é o cabeçalho User-Agent?

É o cabeçalho de requisição que informa o navegador ou o programa que faz a requisição, com a versão e geralmente o sistema operacional; o curl envia curl/8.22.0. Os sites o usam para estatísticas e para lidar com as particularidades de cada navegador. O que é User-Agent? Como ver e como alterar mostra como ler o seu.

O que significa X-Forwarded-For?

É um cabeçalho em que um proxy ou balanceador de carga escreve o endereço IP do cliente que lhe enviou a requisição, para que o servidor por trás veja o endereço do visitante. Ele nunca foi padronizado formalmente; o Forwarded (RFC 7239) é a versão padrão. Qualquer pessoa pode enviá-lo, então um servidor só deve confiar nas entradas que o próprio proxy dele adicionou.

Os cabeçalhos HTTP são criptografados no HTTPS?

Sim. No HTTPS, os cabeçalhos viajam dentro da criptografia junto com o corpo, então as redes e os proxies no caminho não conseguem lê-los. O endereço IP do servidor continua visível e, na maioria dos casos, o nome de domínio também, já que ele é enviado enquanto a conexão é estabelecida.

O que são cabeçalhos HTTP em uma API?

São os mesmos cabeçalhos, usados de forma mais deliberada. Uma chamada de API costuma enviar uma chave ou um token em Authorization (algumas APIs usam um cabeçalho próprio, como X-API-Key), declara o corpo com Content-Type: application/json e pede JSON com Accept. Requisições em excesso costumam receber um 429 com Retry-After.

O que significa "HTTP header is larger than 8192 bytes"?

Significa que uma requisição ou resposta trouxe mais dados de cabeçalho do que o software que a processa aceita. A frase vem do Netty, uma biblioteca de rede para Java com limite padrão de 8.192 bytes; outros números, como 10.240, são limites configurados de propósito. O HTTP em si não define um máximo. Se você é visitante, apague os cookies daquele site; se é desenvolvedor, reduza os cookies ou os tokens, ou aumente o limite.

Por que o cabeçalho Referer é escrito errado?

Porque o nome com o erro já estava na especificação do HTTP/1.0, de 1996, e softwares do mundo todo leem o cabeçalho com esse nome. O padrão atual mantém Referer com uma nota "[sic]"; o cabeçalho mais recente, Referrer-Policy, está escrito corretamente.

Em resumo

Cabeçalhos HTTP são as linhas Nome: valor no início de cada requisição e de cada resposta. Os cabeçalhos de requisição indicam o site, o navegador, os idiomas, os cookies e as credenciais; os de resposta dizem o que é o corpo, por quanto tempo guardá-lo em cache, quais cookies armazenar e para onde ir em seguida. Os nomes não diferenciam maiúsculas de minúsculas, e o HTTP/2 e o HTTP/3 os escrevem em minúsculas. Leia os cabeçalhos no DevTools ou com o curl, e envie cabeçalhos de segurança do seu próprio site. Com HTTPS, um proxy vê só a curta requisição CONNECT com o nome do site e o seu login do proxy; para passar o seu próprio tráfego por um, comece pelos nossos serviços de proxy.