Analisador de cabeçalhos HTTP — cabeçalhos de pedido e de resposta, descodificados linha a linha
Analisador de cabeçalhos HTTP
Cole um pedido ou resposta HTTP completo — o bloco que o curl -v imprime, ou o que o painel de Rede do navegador mostra — e cada linha de cabeçalho é descodificada: o nome, o valor, uma frase em linguagem simples sobre o que faz, e o documento que a define. O Set-Cookie é desmontado atributo a atributo (Secure, HttpOnly, SameSite, Max-Age, Expires…), os parâmetros de Content-Type e Accept são expandidos, e o bloco é auditado quanto aos problemas estruturais clássicos: linhas dobradas obsoletas, caracteres ilegais, cabeçalhos duplicados e cabeçalhos enviados no sentido errado. Tudo é executado no seu navegador e nada é enviado.
Entrada
Automaticamente olha para a primeira linha: uma linha de pedido (GET /caminho HTTP/1.1) significa pedido, uma linha de estado (HTTP/1.1 200 OK) significa resposta, qualquer outra coisa é lida como um bloco simples de cabeçalhos. As outras escolhas forçam o sentido, o que muda os avisos que se aplicam.
Relatório analisado
Ainda nada analisado. Cole um bloco de pedido ou de resposta acima e carregue em Analisar cabeçalhos, ou carregue em Exemplo para um exemplo trabalhado.
Onde obter um bloco que valha a pena analisar. Num terminal, curl -v https://example.com/ 2>&1 imprime o pedido e a resposta com os prefixos > e < — retire-os e cole. curl -sI https://example.com/ dá apenas o bloco de cabeçalhos da resposta. No navegador, abra as ferramentas de programador, o separador Rede, recarregue, selecione o pedido do documento e use Copiar → Copiar cabeçalhos da resposta; para o lado do pedido use Copiar como cURL e leia as opções. Um bloco simples de linhas Nome: valor sem linha inicial também é analisado — as verificações de sentido ficam então relaxadas.
Autoteste Volta a executar o analisador contra blocos fixos: deteção de sentido, ambos os conjuntos de amostras, cada regra de atributo de Set-Cookie (SameSite=None sem Secure, um Max-Age não numérico, um Expires inválido, um atributo desconhecido, um cookie sem sinal de igual), a junção de obs-fold, nomes de campo ilegais, cabeçalhos duplicados, incoerências de sentido e os caminhos negativos. Nada é enviado para lado nenhum.
O que é um cabeçalho HTTP?
Numa frase: uma mensagem HTTP é uma linha inicial, um bloco de linhas Nome: valor chamadas cabeçalhos, uma linha vazia e um corpo opcional — os cabeçalhos transportam tudo sobre a mensagem exceto o próprio corpo: quem a enviou, o que pode aceitar, como é guardada em cache, como é autenticada e o que o remetente quer de volta.
em que formato está o corpo e qual a cópia que é esta
Cabeçalhos de controlo
ambos, sobre a ligação
Cache-Control, Connection, Via, Transfer-Encoding
como são tratadas a mensagem e a ligação pelo caminho
Alguns cabeçalhos são firmemente unidirecionais: If-None-Match só faz sentido num pedido e Set-Cookie só numa resposta. Analisar no sentido errado é um dos erros clássicos de depuração por copiar e colar, razão pela qual esta página o assinala.
A gramática de uma linha de cabeçalho
A RFC 9110 define uma linha de campo como field-name ":" OWS field-value OWS — um nome feito apenas de caracteres de token (letras, algarismos e !#$%&'*+-.^_`|~), dois-pontos sem espaço antes, e um valor de caracteres visíveis, espaços e tabulações. Os nomes dos cabeçalhos não distinguem maiúsculas de minúsculas (content-type é igual a Content-Type); os valores quase sempre distinguem. Uma linha que começa por espaço ou tabulação costumava continuar o cabeçalho anterior — obs-fold, obsoleto desde 2014: um proxy que a desdobre pode alterar o significado do cabeçalho, pelo que o analisador aqui a junta, mas avisa que ela existe.
Erros comuns
Confiar no X-Forwarded-For. É acrescentado por cada proxy no caminho, e um cliente consegue forjar o primeiro salto. Diz-lhe o que uma cadeia de proxies afirma, e não quem está ligado; trate-o como uma pista e prefira um proxy que controle e que o sobrescreva.
Ler apenas os cabeçalhos de resposta. Metade dos erros interessantes (um Accept duplicado, um Host em falta, um cabeçalho de autorização dirigido ao anfitrião errado) vive no pedido, que o navegador esconde por defeito. Use Copiar como cURL para ver o seu.
Fundir linhas de Set-Cookie. A maioria dos cabeçalhos duplicados pode ser combinada com vírgulas — o Set-Cookie não pode, porque a vírgula aparece dentro do próprio valor. Os navegadores tratam cada linha como um cookie separado.
Esperar que o Content-Length seja o tamanho do corpo que escreveu. É o tamanho depois de aplicado o Content-Encoding, e apenas quando a mensagem não é em blocos; uma resposta com Transfer-Encoding: chunked não tem um comprimento único significativo.
Julgar cabeçalhos pelo prefixo X-. A convenção morreu com a RFC 6648: X-Forwarded-For e X-Content-Type-Options são normas de facto permanentes, enquanto muitos cabeçalhos que não são X são experimentais. Julgue pelo documento que o define, e não pelo prefixo.
Perguntas frequentes
É seguro colar cabeçalhos aqui? A análise é feita inteiramente no seu navegador e nada é enviado. Dito isto, um bloco de cabeçalhos copiado é uma impressão digital: cookies, cabeçalhos de autorização e o User-Agent exato, juntos, podem identificá-lo; por isso, analise blocos que não se importaria de mostrar a um colega.
Porque é que o meu navegador mostra cabeçalhos como :status que esta página considera erros? São pseudo-cabeçalhos do HTTP/2 e HTTP/3 — as camadas de enquadramento binário substituem a linha inicial e o Host por campos pseudo. Esta página analisa o texto clássico do HTTP/1.1; os pseudo-cabeçalhos são a mesma informação depois de o protocolo a ter traduzido.
O que aconteceu ao X-XSS-Protection? Está obsoleto: o auditor que controlava causou erros de segurança próprios e os navegadores removeram-no. A sua função pertence a uma Content-Security-Policy — construa uma no gerador de CSP e audite o conjunto completo no verificador de cabeçalhos de segurança.
Como se verifica um atributo de Set-Cookie? Contra a RFC 6265: nomes e valores são separados no primeiro sinal de igual, os atributos depois do primeiro ponto e vírgula, Expires tem de ser uma data no formato de cookie, Max-Age são dígitos, SameSite é um de Strict/Lax/None — e None sem Secure é rejeitado pelos navegadores atuais, pelo que é assinalado.
Posso analisar apenas uma lista de linhas de cabeçalho? Sim — escolha Apenas bloco de cabeçalhos e cole sem linha inicial. As verificações de sentido são relaxadas; tudo o resto (estrutura, Set-Cookie, parâmetros) continua a correr.