Base64URL cambia due caratteri alfabetici: il più standard di Base64 diventa un trattino e la barra diventa un carattere di sottolineatura. Le informazioni codificate rimangono invariate. La variante aiuta quando il protocollo circostante attribuisce un significato speciale al segno più o alla barra, ma non esonera il valore da ogni URL o regola dell'applicazione.
Utilizzare un vettore che esponga la differenza
I byte FB FF codificano come +/8= nella norma Base64 e -_8= in Base64URL. Un test come Hello produce solo caratteri alfabetici condivisi, quindi non può rivelare se la conversione URL-safe funziona.
const standard = btoa(String.fromCharCode(251, 255));
const urlSafe = standard.replace(/\+/g, '-').replace(/\//g, '_');
console.log(standard); // +/8=
console.log(urlSafe); // -_8=
L'imbottitura è un accordo separato
Molti formati di token omettono i segni di uguale finali, mentre altri sistemi li mantengono. Cambiare l’alfabeto e rimuovere il padding sono scelte indipendenti. Se la lunghezza dell’input senza padding divisa per 4 dà resto 2, occorrono due segni di uguale; se il resto è 3, ne occorre uno. Un resto di 1 non può essere corretto aggiungendo solo padding, perché un carattere di sei bit non basta a rappresentare un byte completo.
Durante la convalida, controlla anche i bit non utilizzati nell'ultimo carattere. Un decodificatore che li ignora può accettare più stringhe per la stessa sequenza di byte. Questa ambiguità può avere importanza quando un'applicazione confronta stringhe codificate anziché byte decodificati. Un produttore canonico dovrebbe emettere una rappresentazione concordata.
Non confondere l'analisi delle query con la decodifica Base64
L'analisi delle query in stile modulo interpreta un segno più letterale come uno spazio. Un valore standard Base64 incollato senza caratteri di escape in una query può quindi essere danneggiato prima che il decodificatore lo veda. Costruisci la query con URLSearchParamsoppure utilizzare la variante Base64URL se il protocollo ricevente lo specifica.
const query = new URLSearchParams({ payload: '+/8=' });
console.log(query.toString()); // payload=%2B%2F8%3D
console.log(query.get('payload')); // +/8=
Non sostituire automaticamente ogni spazio con più: uno spazio potrebbe essere una formattazione autentica o la prova di un altro errore. Preserva la fonte, identifica il livello di trasporto che l'ha modificata e applica una correzione deliberata. Per i segmenti JWT, utilizza le regole Base64URL del formato token anziché inventare una politica di riparazione generale.
Gli alfabeti standard e URL-safe sono descritti in RFC 4648. La tua integrazione necessita ancora di scelte esplicite per il riempimento, l'accettazione degli spazi bianchi e la lunghezza massima.