Base64 vs Codificação URL: Qual a Diferença?

04 Jan 2026 1,809 words

Base64 vs Codificação URL

A codificação Base64 e a codificação URL (codificação percentual) servem a propósitos diferentes no desenvolvimento web. Entender quando usar cada uma é essencial. Embora ambos sejam esquemas de codificação que transformam dados em uma representação diferente, eles resolvem problemas fundamentalmente distintos. Base64 é projetada para converter dados binários arbitrários em um formato de texto ASCII seguro, enquanto a codificação URL garante que caracteres especiais em URLs sejam transmitidos com segurança pela internet. Escolher a codificação errada para seu caso de uso pode levar a corrupção de dados, URLs quebrados, vulnerabilidades de segurança ou tamanhos de payload inflados desnecessariamente.

Desenvolvedores frequentemente encontram situações onde precisam decidir entre esses dois métodos de codificação. Por exemplo, ao incluir um token de autenticação em um parâmetro de consulta URL, você pode se perguntar se deve usar codificação Base64 ou codificação URL. A resposta depende da natureza dos dados, das restrições do meio de transporte e dos requisitos do sistema receptor. Este guia fornece uma comparação abrangente para ajudar você a fazer a escolha certa.

Entendendo a Codificação URL

A codificação URL, também conhecida como codificação percentual, converte caracteres em um formato que pode ser transmitido pela internet. A especificação URL (RFC 3986) define quais caracteres são permitidos sem reservas em URLs e quais devem ser codificados. Caracteres sem reservas incluem letras maiúsculas e minúsculas, dígitos e os caracteres hífen (-), sublinhado (_), ponto (.) e til (~). Todos os outros caracteres devem ser codificados percentualmente se aparecerem em uma URL.

Espaços se tornam %20, e caracteres especiais são substituídos por seus valores hexadecimais ASCII precedidos por %. O processo de codificação é direto: cada byte que não é um caractere sem reservas é substituído por um % seguido por sua representação hexadecimal de dois dígitos. Por exemplo, a string hello world se torna hello%20world, e a&b=c se torna a%26b%3Dc.

Por Que a Codificação URL É Necessária

URLs têm um conjunto de caracteres restrito por razões históricas e práticas. A especificação URL original foi projetada quando a internet transmitia principalmente texto ASCII de 7 bits. Caracteres fora deste intervalo, ou caracteres que têm significado especial em URLs (como ?, # e &), devem ser codificados para evitar que sejam mal interpretados pelo analisador URL.

Por exemplo, o caractere & é usado para separar parâmetros de consulta. Se seus dados contiverem um &, ele seria interpretado como um separador de parâmetros em vez de dados. A codificação URL converte & para %26, garantindo que seja tratado como parte do valor do parâmetro. Similarmente, o caractere # marca o início de um fragmento URL; %23 garante que apareça como dados.

A codificação URL também permite a inclusão de caracteres não ASCII em URLs através da codificação UTF-8. Por exemplo, o caractere Unicode U+00E9 (é) é codificado como %C3%A9 em uma URL. Isso permite que nomes de domínio e caminhos internacionalizados sejam representados dentro da especificação URL apenas ASCII.

Caracteres Comuns Codificados em URL

Caractere Codificado Caractere Codificado
Espaço %20 # %23
! %21 $ %24
" %22 % %25
& %26 + %2B
, %2C / %2F
: %3A ; %3B
= %3D ? %3F

O caractere de espaço merece menção especial porque tem duas codificações possíveis. Em strings de consulta, a especificação application/x-www-form-urlencoded codifica espaços como + em vez de %20. Este comportamento legado vem da submissão de formulários HTML. Ao codificar dados para parâmetros de consulta, você deve usar + para espaços se estiver seguindo a convenção de codificação de formulários, ou %20 para espaços em outros componentes URL, como o caminho.

Codificação URL em Diferentes Componentes URL

Diferentes partes de uma URL têm requisitos de codificação distintos. O componente de caminho não deve codificar / porque separa segmentos do caminho. O componente de consulta não deve codificar ? ou & porque têm significados especiais na string de consulta. No entanto, se seus dados contiverem esses caracteres, eles devem ser codificados: ? se torna %3F, & se torna %26.

O componente de fragmento (após #) tem as regras de codificação mais lenientes porque o fragmento nunca é enviado ao servidor. No entanto, a codificação ainda é recomendada para evitar ambiguidade na análise do lado do cliente.

Entendendo a Codificação Base64

Base64 converte dados binários em texto ASCII usando um alfabeto de 64 caracteres. O alfabeto consiste em A-Z, a-z, 0-9, + e /, com = usado para preenchimento. Este conjunto de 64 caracteres garante que a saída codificada consista apenas em caracteres ASCII universalmente seguros, embora os caracteres + e / exijam codificação URL adicional quando usados em URLs.

A codificação Base64 funciona processando dados de entrada em grupos de 3 bytes (24 bits). Esses 24 bits são divididos em quatro grupos de 6 bits, e cada valor de 6 bits (0-63) é mapeado para um caractere no alfabeto Base64. Se o comprimento da entrada não for um múltiplo de 3 bytes, caracteres de preenchimento (=) são adicionados para tornar o comprimento da saída um múltiplo de 4 caracteres.

O propósito principal da codificação Base64 é tornar dados binários seguros para canais de transporte baseados em texto. Email (MIME), JSON, XML e cabeçalhos HTTP são todos protocolos baseados em texto que não podem lidar com dados binários brutos de forma confiável, pois bytes binários podem ser interpretados como caracteres de controle ou podem ser modificados pela camada de transporte.

Principais Diferenças

As diferenças fundamentais entre Base64 e codificação URL decorrem de seus diferentes propósitos e restrições de design.

Característica Base64 Codificação URL
Propósito Binário para texto Texto seguro para URL
Tamanho da saída ~33% maior Variável
Conjunto de caracteres A-Z, a-z, 0-9, +, /, = % seguido por códigos hex
Reversível Sim Sim
Caso de uso Data URIs, email, API Parâmetros de consulta, dados de formulário
Tipo de entrada Dados binários Texto com caracteres especiais

Base64 sempre expande os dados em aproximadamente 33 por cento, independentemente do conteúdo da entrada, porque cada 3 bytes de entrada se tornam 4 caracteres de saída. A codificação URL expande os dados por uma quantidade variável. Letras e dígitos ASCII não são expandidos (1 byte se torna 1 byte). Espaços expandem de 1 byte para 3 bytes (%20). Caracteres fora do intervalo ASCII, codificados como UTF-8, expandem ainda mais: um único caractere Unicode pode se tornar 2 ou 3 bytes UTF-8, cada um codificado como %XX, resultando em 6 ou 9 bytes na URL.

Os conjuntos de caracteres também diferem significativamente. A saída Base64 usa um conjunto fixo de 65 caracteres, enquanto a codificação URL pode produzir qualquer caractere na forma %XX. Isso significa que a saída Base64 é mais compacta para dados binários, mas não pode representar caracteres fora de seu alfabeto sem codificação secundária. A codificação URL é mais flexível, mas menos eficiente em espaço para dados binários.

Base64 Seguro para URL (Base64URL)

Como o Base64 padrão usa + e / como parte de seu alfabeto, dados codificados em Base64 não podem ser usados diretamente em URLs sem codificação URL adicional. Para resolver isso, a variante Base64URL foi introduzida. Base64URL substitui + por - e / por _, e remove os caracteres de preenchimento =. Essas substituições produzem uma saída segura para URLs sem necessidade de codificação percentual.

Base64URL é usado por JWT (JSON Web Tokens), que codificam seu cabeçalho e payload usando esta variante. Quando você vê um token JWT como eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dQw4w9WgXcQ, os dois primeiros segmentos são codificados em Base64URL.

Quando Usar Cada Um

A tabela a seguir fornece orientação rápida para cenários comuns.

Cenário Codificação
Incorporar imagens em HTML Base64
Enviar dados em parâmetros de consulta Codificação URL
Anexos de email Base64
Envios de formulário Codificação URL
Tokens de autenticação de API Base64
Caminhos de arquivo em URLs Codificação URL
Tokens JWT Base64URL
Valores de cookie Codificação URL

Escolhendo a Codificação Correta

Siga estas diretrizes ao decidir entre Base64 e codificação URL.

Use Base64 quando:

  • Você precisa transmitir dados binários (imagens, documentos, dados criptografados) através de um protocolo baseado em texto.
  • Você quer incorporar dados inline em HTML, CSS ou JSON (data URIs).
  • Você está codificando dados para anexos de email MIME.
  • Você está criando tokens de autenticação ou outros blocos de dados opacos.

Use codificação URL quando:

  • Você está construindo URLs ou strings de consulta com caracteres especiais.
  • Você está processando dados de formulário enviados via application/x-www-form-urlencoded.
  • Você precisa codificar dados de texto para uso em segmentos de caminho URL, parâmetros de consulta ou fragmentos.
  • Você está codificando valores de cookie que podem conter caracteres especiais.

Combinando Codificações

Em alguns casos, você pode precisar usar ambas as codificações juntas. Por exemplo, se você está passando um valor codificado em Base64 como um parâmetro de consulta, deve codificar URL da saída Base64 para garantir que os caracteres + e = sejam seguros na URL. Esta dupla codificação é comum em designs de API onde tokens ou identificadores são codificados em Base64 e transmitidos como parâmetros de consulta.

const base64Data = btoa('some binary data');
const urlSafe = encodeURIComponent(base64Data);
// urlSafe agora é seguro para uso em uma URL

No lado receptor, você inverte o processo: primeiro decodifica URL, depois decodifica Base64.

Exemplos Práticos

Exemplo 1: Incorporando uma Imagem em HTML

Você tem um ícone PNG de 1 KB que quer incorporar em um email HTML. A abordagem correta é a codificação Base64:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...">

A codificação URL não ajudaria aqui porque o email HTML não suporta nativamente data URIs codificadas percentualmente.

Exemplo 2: Passando uma Consulta de Pesquisa em uma URL

Você quer criar um link de pesquisa que inclua a consulta "café & bakery". A abordagem correta é a codificação URL:

https://example.com/search?q=caf%C3%A9+%26+bakery

Usar Base64 para isso produziria uma URL muito mais longa e menos legível.

Exemplo 3: Token de Autenticação de API

Sua API usa um token que combina um ID de usuário e um timestamp, assinado com HMAC. O token é binário e deve ser transmitido como um parâmetro de consulta. A abordagem correta é Base64 (preferencialmente Base64URL) seguido de codificação URL, ou simplesmente Base64URL se a camada de transporte lidar com os caracteres especiais restantes.

https://api.example.com/data?token=eyJ1c2VySWQiOjEyMywidGltZXN0YW1wIjoxNzA0MDAwMDAwfQ

Usar codificação URL diretamente no token binário produziria um resultado muito mais longo.


About this article

Entenda as principais diferenças entre a codificação Base64 e a codificação URL, e quando usar cada uma em seus projetos.


Related Articles


Related Tools

Help2Code Logo
Menu