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:
| Parte | Significado |
|---|---|
| Dica de tipo MIME | Ajuda o navegador a interpretar bytes |
Sentinela ;base64, | Indica que o que segue são bytes em Base64 |
| Payload | Bloco 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.