Referência6 min de leitura

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

A codificação de URL (percent-encoding) converte caracteres especiais em URLs para o formato %XX conforme a RFC 3986. A codificação Base64 converte dados binários em uma string de texto usando 64 caracteres ASCII conforme a RFC 4648. Elas têm propósitos diferentes e não são intercambiáveis.

O que é a Codificação de URL?

A codificação de URL, também chamada de percent-encoding, é definida pela RFC 3986 como o mecanismo para representar caracteres em uma URI que não são permitidos ou que têm significado especial. Cada caractere a ser codificado é convertido em um ou mais bytes (usando UTF-8), e cada byte é representado por um sinal de porcentagem (%) seguido de dois dígitos hexadecimais em maiúsculas.

Por exemplo, um caractere de espaço se torna %20, um e comercial se torna %26, e um caractere não-ASCII como o símbolo do Euro se torna %E2%82%AC (três bytes UTF-8, cada um codificado em percent-encoding).

// Exemplos de codificação de URL em JavaScript
encodeURIComponent('hello world');   // "hello%20world"
encodeURIComponent('price=10&qty=2'); // "price%3D10%26qty%3D2"
encodeURIComponent('cafe');         // "caf%C3%A9"

A codificação de URL foi projetada especificamente para tornar as URLs seguras e válidas. Ela codifica apenas os caracteres que não são permitidos ou que têm significados reservados em URIs, deixando intactos os caracteres alfanuméricos e alguns símbolos seguros.

O que é a Codificação Base64?

A codificação Base64, definida pela RFC 4648, é um esquema de codificação de binário para texto que representa dados binários usando um conjunto de 64 caracteres ASCII: A-Z, a-z, 0-9, + e /, com = usado para preenchimento (padding). A cada três bytes de entrada são produzidos quatro caracteres de saída.

O Base64 foi projetado para transmitir dados binários por canais que só oferecem suporte confiável a texto, como e-mail (MIME) ou incorporação de dados em XML/JSON. Ele não é específico de URLs e codifica todos os bytes de entrada, não apenas os caracteres especiais.

// Exemplos de codificação Base64 em JavaScript
btoa('hello world');         // "aGVsbG8gd29ybGQ="
btoa('price=10&qty=2');      // "cHJpY2U9MTAmcXR5PTI="

// Para strings Unicode, converta primeiro para UTF-8
function toBase64(str) {
  return btoa(unescape(encodeURIComponent(str)));
}
toBase64('cafe');           // "Y2Fmw6k="

Também existe uma variante do Base64 segura para URLs (Base64url) que substitui + por - e / por _, e frequentemente omite o preenchimento =. Essa variante é usada em JWTs, data URIs em URLs e outros contextos onde os caracteres do Base64 padrão entrariam em conflito com a sintaxe de URL.

Principais Diferenças

Característica Codificação de URL Codificação Base64
Padrão RFC 3986 RFC 4648
Propósito Tornar URLs seguras Representar binário como texto
Codifica Apenas caracteres especiais/reservados Todos os bytes de entrada
Formato de saída Sequências hexadecimais %XX A-Z, a-z, 0-9, +, /, =
Aumento de tamanho Variável (só crescem os caracteres codificados) Sempre ~33% maior
Reversível Sim Sim
Legível por humanos Parcialmente (caracteres não reservados permanecem) Não
Segura para URL por padrão Sim (por projeto) Não (contém +, /, =)

Quando Usar Cada Uma

Use a codificação de URL quando você precisar incluir caracteres especiais em uma URL, como valores de parâmetros de consulta, segmentos de caminho ou identificadores de fragmento. A codificação de URL é a escolha correta para qualquer situação em que os dados precisem ser incorporados dentro de uma estrutura de URL.

Use a codificação Base64 quando você precisar representar dados binários (imagens, arquivos, payloads criptografados) como texto, incorporar conteúdo binário em JSON ou XML, ou transmitir dados por canais que só aceitam texto. O Base64 também é usado em cabeçalhos de HTTP Basic Authentication e em JSON Web Tokens (JWTs).

// Codificação de URL: incorporando um termo de busca em uma URL
const searchUrl = 'https://example.com/search?q=' +
  encodeURIComponent('C++ & Java');
// "https://example.com/search?q=C%2B%2B%20%26%20Java"

// Base64: incorporando uma imagem em CSS ou HTML
const imageData = 'data:image/png;base64,iVBORw0KGgoAAAANS...';

// Base64: cabeçalho de HTTP Basic Auth
const credentials = btoa('username:password');
const header = 'Authorization: Basic ' + credentials;

É Possível Combiná-las?

Sim, e em alguns casos você precisa combiná-las. Se você precisar passar dados codificados em Base64 como um parâmetro de URL, a saída padrão do Base64 pode conter os caracteres +, / e =, que têm significados especiais em URLs. Você tem duas opções:

Opção 1: Aplique a codificação de URL à string Base64 antes de colocá-la na URL. O + se torna %2B, o / se torna %2F e o = se torna %3D.

Opção 2: Use a variante Base64url (RFC 4648, Seção 5), que substitui + por -, / por _ e remove o preenchimento. Essa é a abordagem usada por JWTs e por muitas APIs modernas.

// Opção 1: aplicar codificação de URL ao Base64 padrão
const base64 = btoa('binary data here'); // "YmluYXJ5IGRhdGEgaGVyZQ=="
const urlSafe = encodeURIComponent(base64);
// "YmluYXJ5IGRhdGEgaGVyZQ%3D%3D"

// Opção 2: codificação Base64url
function toBase64url(str) {
  return btoa(str)
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '');
}
toBase64url('binary data here');
// "YmluYXJ5IGRhdGEgaGVyZQ"

Artigos relacionados

Experimente as nossas ferramentas gratuitas