1001Ferramentas
🗜️Dev

Parse Accept-Encoding

Faz parse do header Accept-Encoding e identifica codings suportados (gzip, br, deflate, etc.).

Codings

Qual compressão o cliente aceita, e em que ordem

O Accept-Encoding é o cabeçalho pelo qual o navegador informa quais compressões ele sabe descomprimir. O servidor escolhe uma, comprime a resposta e devolve o nome escolhido em Content-Encoding. Quando essa negociação sai errada, o sintoma é claro: o navegador baixa um arquivo binário em vez de exibir a página, ou o conteúdo chega ilegível.

Cole o cabeçalho e a página separa cada codificação com seu fator q, ordenando da preferência maior para a menor. Vale a mesma regra do Accept-Language: um item sem q vale 1, e a ordem em que aparecem no texto não é a ordem de preferência. Um q igual a zero tem significado próprio — quer dizer que aquela codificação não é aceita, e não que tanto faz.

Os nomes que aparecem na prática são poucos. O gzip é universal. O br, do Brotli, comprime melhor texto e hoje vem em quase todo navegador, mas só é oferecido em conexão HTTPS. O zstd é o mais recente e vem ganhando espaço. O identity significa sem compressão nenhuma, e o asterisco cobre qualquer coisa não listada. Do lado do servidor, qualquer resposta que varie com esse cabeçalho precisa mandar Vary com o nome dele, ou algum cache intermediário vai servir conteúdo comprimido para quem não pediu.

Perguntas frequentes

Por que meu conteúdo vem sem compressão?
As causas comuns são o servidor não ter o tipo MIME na lista de compressíveis, a resposta ser pequena demais para o limite mínimo configurado, ou um proxy no caminho ter removido o cabeçalho. Vale conferir também se a resposta já vem comprimida na origem — comprimir duas vezes costuma ser desligado de propósito.
Brotli é sempre melhor que gzip?
Para conteúdo estático de texto, geralmente sim, com ganho na casa de 15 a 20 por cento sobre o gzip. Para conteúdo gerado a cada requisição, o nível alto de Brotli custa CPU demais e a conta pode não fechar — a prática é usar nível alto para o que é pré-comprimido no build e nível baixo para o dinâmico.
Preciso mesmo do Vary?
Precisa, sempre que a resposta muda conforme o cabeçalho. Sem Vary com Accept-Encoding, um cache compartilhado pode guardar a versão em Brotli e entregá-la a um cliente que só entende gzip. O sintoma é conteúdo corrompido que aparece para alguns usuários e some ao recarregar.

Ferramentas Relacionadas