Lição 4

Base64 em URLs e Data URIs

Variante padrão vs URL-safe e uso do esquema `data:`.

URLs, query strings e canais próximos a cookies tratam + e / de forma incômoda — e o padding = interage mal com concatenação frágil. Dialetos Base64URL especializados reorganizam o alfabeto para reduzir necessidade de escape.

Esta lição separa Base64 MIME, RFC 4648 URL-safe e padrões pragmáticos de data:.

Alfabetos padrão vs URL-safe

O Base64 clássico mapeia 62 → '+' e 63 → '/'.

Implementações URL-safe (informalmente “base64url”) em geral:

  • remapeiam +' → '-'
  • remapeiam /' → '_'
  • omitem padding quando a spec que você segue permite (segmentos JWS em JWT usam base64url sem padding)

Nunca misture encoders e decoders entre dialetos sem conversão. Um token gerado com +// quebra ao colar em segmento de path, a menos que você percent-encode ou troque de alfabeto de forma consistente.

Percent-encoding ainda acontece

Mesmo Base64 URL-safe pode incluir caracteres que precisam de codificação em contextos de parser de URL estritos — hífen e underscore se saem melhor que mais e barra, mas não aboliram regras de camadas. Monte URLs com APIs tipadas (URLSearchParams, helpers do framework), não com templates frágeis em torno de payloads brutos.

Checagem rápida com JWT

Decodificar manualmente para aprender é válido — lembre que header/payload de JWT são bytes JSON UTF-8 → base64url sem padding. Se você vê +, pode estar olhando saída PEM ou MIME em vez de JWT.

URIs data:

Incorpore ativos pequenos inline:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

Partes:

ParteSignificado
Dica de tipo MIMEAjuda o navegador a interpretar bytes
Sentinela ;base64,Indica que o que segue são bytes em Base64
PayloadBloco ASCII concatenado (muitas vezes longo)

Prós: menos requisições HTTP para ícones minúsculos em protótipos.

Contras:

  • Cache separado das eficiências de bundle de CSS
  • Infla HTML/CSS de forma acentuada (~33% antes do contexto de gzip)
  • Content Security Policy e clientes de e-mail podem bloquear

Em produção costuma-se preferir arquivos estáticos com hash/CDN — não porque Base64 falhe, mas porque trade-offs de engenharia favorecem cache e separação.

Payloads muito grandes

URIs data: enormes degradam editores e memória do DOM. Streams, blobs e object URLs (URL.createObjectURL) servem melhor binários grandes na plataforma web.

Resumo

Contextos de URL pressionam duas dimensões: alfabeto amigável e ergonomia de padding. Escolha a variante que sua spec exige (JWT vs PEM vs MIME) e passe conversões por bibliotecas comprovadas — não substituições ad hoc de string que esquecem bytes de borda.

Experimente variantes padrão e URL-safe no Codificador / Decodificador Base64 com amostras curtas antes de integrar em redirects ou tokens.

Voltar à visão geral do curso