1001Ferramentas
📋 Dev

Parser de Content-Type

Decompõe um header Content-Type em mediatype, charset, boundary e demais parâmetros. Útil para depurar APIs e uploads.

Content-Type: tipo, subtipo e parâmetros

O Content-Type informa como interpretar o corpo da mensagem, e sua estrutura é mais rica do que o uso corriqueiro sugere: tipo, barra, subtipo, e depois quantos parâmetros forem necessários, cada um precedido de ponto e vírgula. Cole o valor e a página separa tudo, removendo as aspas dos parâmetros quando existem.

O parâmetro mais consequente é o charset. Sem ele em conteúdo de texto, o navegador adivinha — e adivinha diferente conforme a versão e a configuração, o que produz o clássico texto com acentuação corrompida que aparece só em alguns visitantes. Para HTML há ainda a regra de precedência: o cabeçalho HTTP vence a declaração dentro do documento.

Vale saber do sufixo estruturado, a parte depois do sinal de mais: em application/ld+json ou image/svg+xml, ele diz qual é a sintaxe base. Isso permite a um cliente que não conhece o tipo específico ainda assim processá-lo como JSON ou XML. É o mecanismo que faz um tipo novo nascer útil sem precisar que todo software o conheça.

Perguntas frequentes

Preciso declarar charset em JSON?
Não, e a norma do tipo application/json chega a dispensar o parâmetro: JSON é definido como UTF-8. Declarar não causa dano, mas declarar charset diferente de UTF-8 sim, porque muitos clientes ignoram o parâmetro e leem como UTF-8 de qualquer jeito.
Qual a diferença entre Content-Type e a detecção por conteúdo?
O cabeçalho é a declaração do servidor; a detecção é o palpite do navegador ao olhar os primeiros bytes. Quando divergem, versões antigas de navegador seguiam o palpite, o que virou vetor de ataque — arquivo enviado como texto e executado como script. O cabeçalho nosniff existe para desligar esse palpite.
Por que o boundary aparece no Content-Type?
Porque em multipart o corpo é dividido em partes por um marcador, e o marcador precisa ser conhecido antes de ler o corpo. Ele vai como parâmetro justamente por isso, e tem de ser uma sequência que não ocorra dentro de nenhuma das partes — por isso costuma ser um valor longo e aleatório.

Ferramentas Relacionadas