Base64 vs Encodage URL : Quelle est la Différence ?

04 Jan 2026 1,889 words

Base64 vs Encodage URL

L'encodage Base64 et l'encodage URL (encodage pourcentage) servent des objectifs différents en développement web. Comprendre quand utiliser chacun est essentiel. Bien que tous deux soient des schémas d'encodage qui transforment les données en une représentation différente, ils résolvent des problèmes fondamentalement distincts. Base64 est conçu pour convertir des données binaires arbitraires en un format texte ASCII sûr, tandis que l'encodage URL garantit que les caractères spéciaux dans les URL sont transmis en toute sécurité sur Internet. Choisir le mauvais encodage pour votre cas d'utilisation peut entraîner une corruption de données, des URL brisées, des vulnérabilités de sécurité ou des tailles de charge utile inutilement gonflées.

Les développeurs rencontrent fréquemment des situations où ils doivent choisir entre ces deux méthodes d'encodage. Par exemple, lors de l'inclusion d'un jeton d'authentification dans un paramètre de requête URL, vous pourriez vous demander s'il faut utiliser l'encodage Base64 ou l'encodage URL. La réponse dépend de la nature des données, des contraintes du support de transport et des exigences du système récepteur. Ce guide fournit une comparaison complète pour vous aider à faire le bon choix.

Comprendre l'Encodage URL

L'encodage URL, également connu sous le nom d'encodage pourcentage, convertit les caractères dans un format qui peut être transmis sur Internet. La spécification URL (RFC 3986) définit quels caractères sont autorisés sans réservation dans les URL et lesquels doivent être encodés. Les caractères sans réservation incluent les lettres majuscules et minuscules, les chiffres et les caractères trait d'union (-), souligné (_), point (.), et tilde (~). Tous les autres caractères doivent être encodés en pourcentage s'ils apparaissent dans une URL.

Les espaces deviennent %20, et les caractères spéciaux sont remplacés par leurs valeurs hexadécimales ASCII précédées de %. Le processus d'encodage est simple : chaque octet qui n'est pas un caractère sans réservation est remplacé par un % suivi de sa représentation hexadécimale à deux chiffres. Par exemple, la chaîne hello world devient hello%20world, et a&b=c devient a%26b%3Dc.

Pourquoi l'Encodage URL Est Nécessaire

Les URL ont un ensemble de caractères restreint pour des raisons historiques et pratiques. La spécification URL originale a été conçue à une époque où Internet transmettait principalement du texte ASCII 7 bits. Les caractères en dehors de cet ensemble, ou les caractères qui ont une signification spéciale dans les URL (comme ?, # et &), doivent être encodés pour éviter qu'ils ne soient mal interprétés par l'analyseur URL.

Par exemple, le caractère & est utilisé pour séparer les paramètres de requête. Si vos données contiennent un &, il serait interprété comme un séparateur de paramètre plutôt que comme une donnée. L'encodage URL convertit & en %26, garantissant qu'il est traité comme faisant partie de la valeur du paramètre. De même, le caractère # marque le début d'un fragment d'URL ; %23 garantit qu'il apparaît comme donnée.

L'encodage URL permet également l'inclusion de caractères non ASCII dans les URL grâce à l'encodage UTF-8. Par exemple, le caractère Unicode U+00E9 (é) est encodé comme %C3%A9 dans une URL. Cela permet aux noms de domaine et chemins internationalisés d'être représentés dans la spécification URL exclusivement ASCII.

Caractères URL Encodés Courants

Caractère Encodé Caractère Encodé
Espace %20 # %23
! %21 $ %24
" %22 % %25
& %26 + %2B
, %2C / %2F
: %3A ; %3B
= %3D ? %3F

Le caractère espace mérite une mention spéciale car il a deux encodages possibles. Dans les chaînes de requête, la spécification application/x-www-form-urlencoded encode les espaces comme + plutôt que %20. Ce comportement hérité provient de la soumission de formulaires HTML. Lors de l'encodage de données pour les paramètres de requête, vous devriez utiliser + pour les espaces si vous suivez la convention d'encodage de formulaire, ou %20 pour les espaces dans d'autres composants URL comme le chemin.

Encodage URL dans Différents Composants URL

Différentes parties d'une URL ont des exigences d'encodage différentes. Le composant chemin ne devrait pas encoder / car il sépare les segments de chemin. Le composant requête ne devrait pas encoder ? ou & car ils ont des significations spéciales dans la chaîne de requête. Cependant, si vos données contiennent ces caractères, ils doivent être encodés : ? devient %3F, & devient %26.

Le composant fragment (après #) a les règles d'encodage les plus laxistes car le fragment n'est jamais envoyé au serveur. Cependant, l'encodage est toujours recommandé pour éviter l'ambiguïté dans l'analyse côté client.

Comprendre l'Encodage Base64

Base64 convertit les données binaires en texte ASCII en utilisant un alphabet de 64 caractères. L'alphabet se compose de A-Z, a-z, 0-9, + et /, avec = utilisé pour le rembourrage. Cet ensemble de 64 caractères garantit que la sortie encodée consiste uniquement en caractères ASCII universellement sûrs, bien que les caractères + et / nécessitent un encodage URL supplémentaire lorsqu'ils sont utilisés dans des URL.

L'encodage Base64 fonctionne en traitant les données d'entrée par groupes de 3 octets (24 bits). Ces 24 bits sont divisés en quatre groupes de 6 bits, et chaque valeur de 6 bits (0-63) est mappée à un caractère dans l'alphabet Base64. Si la longueur d'entrée n'est pas un multiple de 3 octets, des caractères de rembourrage (=) sont ajoutés pour rendre la longueur de sortie un multiple de 4 caractères.

Le but principal de l'encodage Base64 est de rendre les données binaires sûres pour les canaux de transport textuels. Le courrier électronique (MIME), JSON, XML et les en-têtes HTTP sont tous des protocoles textuels qui ne peuvent pas gérer les données binaires brutes de manière fiable car les octets binaires peuvent être interprétés comme des caractères de contrôle ou peuvent être modifiés par la couche de transport.

Différences Clés

Les différences fondamentales entre Base64 et l'encodage URL découlent de leurs objectifs et contraintes de conception différents.

Caractéristique Base64 Encodage URL
Objectif Binaire vers texte Texte sûr pour URL
Taille de sortie ~33 % plus grande Variable
Ensemble de caractères A-Z, a-z, 0-9, +, /, = % suivi de codes hex
Réversible Oui Oui
Cas d'utilisation Data URIs, email, API Paramètres requête, données formulaire
Type d'entrée Données binaires Texte avec caractères spéciaux

Base64扩 développe toujours les données d'environ 33 pour cent quel que soit le contenu d'entrée, car chaque groupe de 3 octets d'entrée devient 4 caractères de sortie. L'encodage URL développe les données d'une quantité variable. Les lettres et chiffres ASCII ne sont pas du tout développés (1 octet devient 1 octet). Les espaces passent de 1 octet à 3 octets (%20). Les caractères en dehors de la plage ASCII, encodés en UTF-8, se développent encore plus : un seul caractère Unicode pourrait devenir 2 ou 3 octets UTF-8, chacun encodé comme %XX, résultant en 6 ou 9 octets dans l'URL.

Les ensembles de caractères diffèrent également significativement. La sortie Base64 utilise un ensemble fixe de 65 caractères, tandis que l'encodage URL peut produire n'importe quel caractère sous la forme %XX. Cela signifie que la sortie Base64 est plus compacte pour les données binaires mais ne peut pas représenter les caractères en dehors de son alphabet sans encodage secondaire. L'encodage URL est plus flexible mais moins efficace en espace pour les données binaires.

Base64 Sûr pour URL (Base64URL)

Parce que le Base64 standard utilise + et / comme partie de son alphabet, les données encodées en Base64 ne peuvent pas être utilisées directement dans les URL sans encodage URL supplémentaire. Pour résoudre ce problème, la variante Base64URL a été introduite. Base64URL remplace + par - et / par _, et supprime les caractères de rembourrage =. Ces substitutions produisent une sortie qui est sûre pour les URL sans nécessiter d'encodage pourcentage.

Base64URL est utilisé par JWT (JSON Web Tokens), qui encode son en-tête et sa charge utile en utilisant cette variante. Lorsque vous voyez un jeton JWT comme eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dQw4w9WgXcQ, les deux premiers segments sont encodés en Base64URL.

Quand Utiliser Chacun

Le tableau suivant fournit des conseils rapides pour les scénarios courants.

Scénario Encodage
Intégration d'images dans HTML Base64
Envoi de données dans des paramètres de requête Encodage URL
Pièces jointes email Base64
Soumissions de formulaires Encodage URL
Jetons d'authentification API Base64
Chemins de fichiers dans les URL Encodage URL
Jetons JWT Base64URL
Valeurs de cookies Encodage URL

Choisir le Bon Encodage

Suivez ces directives pour décider entre Base64 et l'encodage URL.

Utilisez Base64 lorsque :

  • Vous devez transmettre des données binaires (images, documents, données chiffrées) via un protocole textuel.
  • Vous souhaitez intégrer des données en ligne dans HTML, CSS ou JSON (data URIs).
  • Vous encodez des données pour les pièces jointes email MIME.
  • Vous créez des jetons d'authentification ou d'autres blocs de données opaques.

Utilisez l'encodage URL lorsque :

  • Vous construisez des URL ou des chaînes de requête avec des caractères spéciaux.
  • Vous traitez des données de formulaire soumises via application/x-www-form-urlencoded.
  • Vous devez encoder des données textuelles pour les segments de chemin URL, les paramètres de requête ou les fragments.
  • Vous encodez des valeurs de cookies qui peuvent contenir des caractères spéciaux.

Combinaison d'Encodages

Dans certains cas, vous pourriez avoir besoin d'utiliser les deux encodages ensemble. Par exemple, si vous passez une valeur encodée en Base64 comme paramètre de requête, vous devez encoder URL la sortie Base64 pour garantir que les caractères + et = sont sûrs dans l'URL. Ce double encodage est courant dans les conceptions API où les jetons ou identifiants sont encodés en Base64 et transmis comme paramètres de requête.

const base64Data = btoa('some binary data');
const urlSafe = encodeURIComponent(base64Data);
// urlSafe is now safe for use in a URL

Du côté récepteur, vous inversez le processus : d'abord décoder URL, puis décoder Base64.

Exemples Pratiques

Exemple 1 : Intégration d'une Image dans HTML

Vous avez une icône PNG de 1 Ko que vous souhaitez intégrer dans un email HTML. L'approche correcte est l'encodage Base64 :

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

L'encodage URL ne serait pas utile ici car le HTML des emails ne prend pas nativement en charge les data URIs encodés en pourcentage.

Exemple 2 : Passage d'une Requête de Recherche dans une URL

Vous souhaitez créer un lien de recherche qui inclut la requête "café & bakery". L'approche correcte est l'encodage URL :

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

Utiliser Base64 pour cela produirait une URL beaucoup plus longue et moins lisible.

Exemple 3 : Jeton d'Authentification API

Votre API utilise un jeton qui combine un ID utilisateur et un timestamp, signé avec un HMAC. Le jeton est binaire et doit être transmis comme paramètre de requête. L'approche correcte est Base64 (de préférence Base64URL) suivi d'un encodage URL, ou simplement Base64URL si la couche de transport gère les caractères spéciaux restants.

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

Utiliser l'encodage URL directement sur le jeton binaire produirait un résultat beaucoup plus long.


About this article

Comprenez les différences clés entre l'encodage Base64 et l'encodage URL, et quand utiliser chacun dans vos projets.


Related Articles


Related Tools

Help2Code Logo
Menu