---
title: "O que são cabeçalhos HTTP? Os mais comuns, explicados"
description: "Cabeçalhos HTTP são linhas nome: valor enviadas antes do corpo de cada requisição e resposta. Para que servem, os mais comuns e como vê-los no Chrome e no curl."
url: https://proxynet.io/pt-br/blog/what-are-http-headers
date: 2026-11-15
author: "Acar Diveroli"
category: "Proxy 101, Tutoriais"
lang: pt-BR
---

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

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.

> **Nota: Resposta rápida**
>
> Cabeçalhos HTTP são linhas no formato `Nome: valor` enviadas no início de cada requisição e de cada resposta HTTP, antes do corpo. Os cabeçalhos de requisição dizem ao servidor qual site você quer (`Host`), qual navegador você usa (`User-Agent`) e quais formatos e idiomas você aceita, além de levar os seus cookies e tokens de login. Os cabeçalhos de resposta dizem ao navegador que tipo de arquivo está chegando (`Content-Type`), por quanto tempo ele pode ficar em cache, quais cookies guardar e para onde ir em seguida. Os nomes dos cabeçalhos não diferenciam maiúsculas de minúsculas. Você pode lê-los no Chrome em DevTools > Rede > Cabeçalhos, ou com `curl -I` e `curl -v`.

## 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](https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Reference/Headers) 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.
1. **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.
1. **Uma linha em branco encerra os cabeçalhos.** Um formulário ou uma chamada de API acrescenta um corpo depois dela.
1. **O servidor lê os cabeçalhos:** `Host` escolhe o site, `Accept-Language` o idioma, `Cookie` o usuário logado.
1. **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.
1. **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](https://www.rfc-editor.org/rfc/rfc9110.html#name-field-names) 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çalho | O que diz ao servidor | Valor de exemplo |
|---|---|---|
| `Host` | Qual site você quer | `example.com` |
| `User-Agent` | Navegador ou app e a versão dele | `curl/8.22.0` |
| `Accept` | Tipos de arquivo que você consegue usar | `text/html` |
| `Accept-Language` | Idiomas da sua preferência | `pt-BR,pt;q=0.9` |
| `Cookie` | Cookies salvos para este site | `theme=dark` |
| `Authorization` | Login no site ou na API | `Bearer <token>` |
| `Referer` | Página de onde você veio | `https://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?](/pt-br/blog/what-are-cookies) 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çalho | O que diz ao navegador | Valor de exemplo |
|---|---|---|
| `Content-Type` | Tipo de arquivo que está no corpo | `application/json` |
| `Cache-Control` | Se e por quanto tempo guardar em cache | `max-age=3600` |
| `Set-Cookie` | Um cookie para guardar | `theme=dark; Secure` |
| `Location` | Endereço para onde ir em seguida | `/login` |
| `Retry-After` | Quanto tempo esperar | `120` |
| `Strict-Transport-Security` | Usar só HTTPS daqui em diante | `max-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**.
1. Clique na guia **Rede**. O DevTools só registra enquanto está aberto, então recarregue a página.
1. Na coluna **Nome**, clique na primeira linha, que é a própria página.
1. 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**.
1. 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](https://developer.chrome.com/docs/devtools/network/reference?hl=pt-br#headers) 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](https://www.rfc-editor.org/rfc/rfc7239), 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?](/pt-br/blog/anonymous-proxy-levels) 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](https://proxynet.io/pt-br/https-proxy) 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ê quer | Onde olhar ou o que usar |
|---|---|
| Ver o que o seu navegador envia | DevTools > Rede > Cabeçalhos |
| Conferir rápido a resposta de um site | `curl -I` |
| Descobrir para onde vai um redirecionamento | `Location` na resposta |
| Entender por que uma página abre em outro idioma | `Accept-Language` na requisição |
| Proteger melhor o seu próprio site | HSTS, CSP, nosniff, Referrer-Policy |
| Fazer login em um proxy | `Proxy-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](/pt-br/blog/what-is-user-agent) 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](/pt-br/proxy).
