Guides Web et HTTP

Comment fonctionnent les URL et les chaînes de requête

Les sept parties d'une URL, quels caractères exigent un encodage en pourcentage et pourquoi, comment les chaînes de requête portent des clés répétées et comment les noms de domaine internationaux deviennent du punycode.

Dernière vérification :

AdSense Placeholder
Slot: header_reference_page
Sur cette page

Une URL (localisateur uniforme de ressource) est une adresse d'au plus sept parties. Ce qui suit le ? est la chaîne de requête, une liste de paires clé=valeur qui transmet de petites quantités de données au serveur. Comme quelques caractères ont un sens spécial dans une URL, toute donnée qui en contient doit être encodée en pourcentage.

Anatomie d'une URL

Prenons cette adresse :

https://[email protected]:8443/shop/shoes?q=red+shoes&size=9&tag=a&tag=b#reviews
Partie Valeur Remarques
Schéma https Quel protocole utiliser
Informations utilisateur user Rares, mieux vaut les éviter
Hôte www.example.com Quel serveur ; insensible à la casse
Port 8443 Par défaut : 80 pour HTTP, 443 pour HTTPS
Chemin /shop/shoes Quelle ressource sur le serveur
Requête q=red+shoes&size=9&tag=a&tag=b Paramètres, après ?
Fragment reviews Un endroit dans la page ; jamais envoyé au serveur

Collez n'importe quelle adresse dans l'analyseur d'URL pour voir ces parties et chaque paramètre de requête séparément.

Encodage en pourcentage

Les caractères réservés ont des rôles dans une URL : ? ouvre la requête, & sépare les paires, = sépare la clé de la valeur, # ouvre le fragment, / sépare les segments de chemin. Pour en utiliser un comme simple donnée, écrivez % suivi de sa valeur d'octet en hexadécimal. Les caractères hors ASCII sont d'abord convertis en octets UTF-8, puis chaque octet est encodé.

Caractère Encodé
espace %20 (ou + dans les requêtes de formulaire)
# %23
& %26
= %3D
? %3F
/ %2F
% %25
é %C3%A9
€ %E2%82%AC

Encodez et décodez du texte avec l'encodeur d'URL et le décodeur d'URL. Notez que % lui-même doit être encodé en %25, d'où le fait que décoder deux fois abîme les valeurs.

Chaînes de requête

Les paires sont séparées par &. La même clé peut se répéter et les récepteurs décident comment la lire. L'analyse de la requête ci-dessus donne :

Clé Valeurs
q red shoes
size 9
tag a, b (la clé apparaît deux fois)

Pour construire une requête correctement encodée, saisissez les paires dans le générateur de chaîne de requête. Par exemple, les valeurs red shoes & boots et 10-20 deviennent q=red+shoes+%26+boots&price=10-20. Les balises de campagne sont une application de la même idée : voir Comment créer des liens UTM pour suivre vos campagnes.

Noms de domaine internationaux

Les noms d'hôte voyagent en ASCII. Un nom comportant des lettres accentuées ou non latines est converti en punycode et préfixé de xn-- : münchen.de devient xn--mnchen-3ya.de. Les lettres d'allure identique d'autres alphabets font du même mécanisme un favori des hameçonneurs : convertissez donc les hôtes suspects avec le convertisseur de nom d'hôte en Punycode.

Pièges courants

  • Oublier d'encoder une valeur. Un & ou # non échappé dans une valeur la tronque silencieusement.
  • Double encodage. Encoder une chaîne déjà encodée transforme %20 en %2520.
  • Mettre des secrets dans l'URL. Les chaînes de requête finissent dans les journaux, l'historique et les en-têtes de référent.
  • Supposer une valeur par clé. Lisez les clés répétées comme des listes.
  • Se fier à la partie visible d'un lien. Voir Comment analyser un lien suspect en toute sécurité.

Essayez ces outils

Voir aussi

  • Glossaire URL
    Une URL (Uniform Resource Locator) est l'adresse d'une ressource sur le web, comme une page, une image ou un point d'accès d'API.
  • Glossaire Chaîne de requête (query string)
    Une chaîne de requête est la partie d'une URL après le point d'interrogation qui transporte des valeurs nommées pour le serveur.
  • Glossaire Punycode
    Le Punycode est l'encodage qui permet de stocker dans le DNS, limité à l'ASCII, des noms de domaine contenant des caractères non ASCII.
  • Glossaire HTTP
    Le HTTP (Hypertext Transfer Protocol) est le protocole que les navigateurs et les serveurs utilisent pour demander et envoyer des pages.
  • Glossaire Nom de domaine
    Un nom de domaine est l'adresse lisible d'un site web ou d'un service, comme example.com, que le DNS traduit en adresse IP.
  • Glossaire Encodage en pourcentage
    L'encodage en pourcentage écrit un caractère interdit dans une URL, ou qui y a un sens spécial.
  • Glossaire Paramètres UTM
    Les paramètres UTM sont des balises ajoutées à la fin d'une URL, comme utm_source et utm_campaign.

Questions fréquemment posées

Dans le chemin d'une URL, une espace s'écrit %20. Dans une chaîne de requête envoyée par un formulaire HTML, l'ancienne convention l'écrit +. Les serveurs décodent les deux dans une requête, mais seul %20 est sûr partout.

Non. Le fragment est géré par le navigateur et n'est pas envoyé dans la requête : il ne peut donc pas servir à des décisions côté serveur.

Le schéma et l'hôte non, mais le chemin généralement oui, tout comme les valeurs de requête sur la plupart des serveurs. /Shop et /shop peuvent être des pages différentes.

AdSense Placeholder
Slot: footer_leaderboard