🔐
← Torna alle guide

Codifica Base64 URL Safe: Cos'è e Perché Conta

· Tag: base64, url-safe, base64url, jwt, encoding, web-development, api

Cos'è la Codifica Base64 URL-Safe?

La codifica Base64 URL-safe (chiamata anche Base64url) è una variante del Base64 standard che sostituisce i caratteri che hanno significati speciali negli URL e nei nomi di file con alternative sicure. Base64 standard usa + e / come parte del suo alfabeto di 64 caratteri, più = per il padding, e tutti e tre sono problematici negli URL, nelle stringhe di query e nei percorsi di file.

Base64url risolve questo problema con due semplici sostituzioni:

| Base64 Standard | Base64 URL-Safe | |-----------------|-----------------| | + (più) | - (meno) | | / (barra) | _ (trattino basso) | | = (padding) | omesso (di solito) |

Perché Base64 Standard Rompe gli URL

Quando una stringa codificata in Base64 contenente + o / compare in un URL, il comportamento di browser e server diventa imprevedibile.

Il Problema di +

Nelle stringhe di query URL, il carattere + viene interpretato come uno spazio. Questo comportamento deriva dalla specifica application/x-www-form-urlencoded e fa sì che i dati decodificati contengano spazi inaspettati.

Ad esempio, una stringa Base64 come Pj4+Pz8/Pw== contiene caratteri +. Se compare in un parametro URL ?token=Pj4+Pz8/Pw==, il server vedrà ?token=Pj4 Pz8/Pw== — il + diventa uno spazio.

Il Problema di /

Nei percorsi URL, il carattere / è un separatore di percorso. Una stringa Base64 come ab/CD+Ef== contiene un / che verrà interpretato come un livello di directory. Se compare in un segmento URL, sia il client che il server potrebbero fraintendere la struttura.

Il Problema di =

Il carattere = viene usato per le coppie chiave-valore nelle stringhe di query. Un = finale in ?data=SGVsbG8= potrebbe essere ambiguo — il = fa parte del padding Base64 o della sintassi del parametro di query?

Sebbene il percent-encoding possa risolvere questi problemi (+ diventa %2B, / diventa %2F), gonfia la lunghezza della stringa e rende il debug più difficile. Base64url è una soluzione più pulita.

Come Funziona Base64url

Base64url è formalmente definito nella RFC 4648 Sezione 5. Usa esattamente lo stesso algoritmo del Base64 standard — 3 byte diventano 4 caratteri — ma con la sostituzione di un carattere alle posizioni 62 e 63 dell'alfabeto:

  • Indice dell'alfabeto 62: +- (meno)
  • Indice dell'alfabeto 63: /_ (trattino basso)

Il padding (=) viene tipicamente rimosso, poiché può essere dedotto dalla lunghezza della stringa durante la decodifica. Una stringa Base64url è sempre un componente URL valido senza escaping aggiuntivo.

Prima e Dopo

Ecco come appaiono gli stessi dati binari in entrambi i formati:

Standard:  Pj4+Pz8/Pw==
URL-safe:  Pj4-Pz8_Pw

Dove Viene Usato Base64url

JSON Web Token (JWT)

JWT è l'utente più prominente di Base64url. Ogni JWT consiste di tre parti — header, payload e firma — ciascuna codificata in Base64 URL-safe e separata da punti:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNqP0m2iTgCjD0

Nota i trattini e i trattini bassi — niente segni più o barre. Se JWT usasse Base64 standard, i token si romperebbero quando passati come parametri URL, che è il modo più comune in cui vengono usati nelle applicazioni web.

OAuth e OpenID Connect

Sia OAuth 2.0 che OpenID Connect si basano su JWT per gli access token e gli ID token, rendendo la codifica Base64url fondamentale per l'autenticazione moderna. Il flusso del codice di autorizzazione, il flusso implicito e il flusso delle credenziali client trasmettono tutti token che usano Base64url.

API Web e Parametri di Query

Molte API REST e GraphQL accettano dati codificati in Base64 nei parametri di query per cursori di paginazione, filtri o payload codificati. Base64url garantisce che questi parametri funzionino correttamente senza codifica URL aggiuntiva.

Esempio reale — paginazione con cursore API:

GET /api/users?cursor=MjAyNC0wMS0xNVQxMDozMDowMFo

L'API di GitHub usa esattamente questo modello per paginare set di risultati di grandi dimensioni.

Nomi di File e Archiviazione File

Le stringhe Base64url sono nomi di file sicuri perché non contengono separatori di percorso (/), nessun carattere speciale che confonda i file system e nessun carattere non valido su Windows (:, *, ?, ecc.).

Reti di Distribuzione di Contenuti e Chiavi di Cache

Le CDN e i livelli di cache usano spesso valori codificati in Base64url come chiavi di cache. Base64 standard con / creerebbe false gerarchie di directory nel namespace della cache, portando a chiavi ambigue.

Conversione Tra Base64 Standard e Base64url

La conversione tra le due varianti è semplice in qualsiasi linguaggio:

JavaScript

// Standard Base64 to URL-safe Base64
function base64ToBase64url(base64) {
  return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

// URL-safe Base64 to Standard Base64
function base64urlToBase64(base64url) {
  let result = base64url.replace(/-/g, '+').replace(/_/g, '/');
  // Restore padding
  while (result.length % 4) {
    result += '=';
  }
  return result;
}

Node.js

Node.js fornisce supporto nativo per Base64url dalla versione 15.7.0:

// Encode to Base64url
const encodedUrl = Buffer.from('Hello, world!').toString('base64url');
console.log(encodedUrl);
// Output: SGVsbG8sIHdvcmxkIQ

// Decode from Base64url
const decoded = Buffer.from(encodedUrl, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!

Python

import base64

# Encode to Base64url
encoded = base64.urlsafe_b64encode(b"Hello, world!")
print(encoded.decode())
# Output: SGVsbG8sIHdvcmxkIQ==

# Decode from Base64url
decoded = base64.urlsafe_b64decode(encoded)
print(decoded.decode())
# Output: Hello, world!

Quando Usare Base64 Standard vs Base64url

Usa Base64 Standard Quando:

  • Codifichi allegati email (lo standard MIME lo richiede)
  • Generi data URL per l'incorporamento in HTML/CSS
  • Memorizzi dati in database dove la sicurezza negli URL è irrilevante
  • Interagisci con sistemi legacy che si aspettano Base64 standard

Usa Base64url Quando:

  • Crei o analizzi token JWT
  • Passi dati codificati nei parametri di query URL o nei segmenti di percorso
  • Generi nomi di file da dati binari
  • Crei chiavi di cache o identificatori
  • Lavori con token OAuth o OpenID Connect

Prova la Codifica Base64 URL-Safe Online

Usa il nostro codificatore e decodificatore Base64 gratuito online per convertire tra i formati Base64 standard e Base64 URL-safe. Incolla i tuoi dati, scegli la variante e ottieni il risultato all'istante.