Extrait de l'émission CPU release Ex0226 : L'adresse était trop longue.
On a donc vu que l'URL est faite pour être lisible aussi bien en machine qu'à la main, et sans repasser, et que dans une URL, les éléments constitutifs peuvent être longs, donc on peut avoir une adresse internet particulièrement longue.
Mais dans l'immédiat… [On va voir si vous avez bien écouté les précédentes releases de CPU, l'émission Carré Petit Utile sur le sujet de l'URL.] commençons par un quiz :
[Musique d'un générique de jeu télévisé] En léger différé du hackerspace où l'on enregistre, et uniquement pour le lol, c'est MakerQuiz. Encore une copie mal faite du jeu d'Alain Chabat sur Radio <FMR>. Avec : Olivier Azeau, Nathalie Rosenberg, Sylvain Wallez, Solarus ; dans le rôle de l'arbitre : Gabriel ; et celui qui a bricolé ça et s'est ditallez, chiche, je me la joue Alain Chabat: Da Scritch.
[bip, l'animateur de jeu présente, le son est en accéléré]
Bonjour et bienvenue à tous. Merci d'être avec nous au milieu du Topic, avec nos amis du Tetalab mais pas que. Nous faisons un jeu pour le fun, pour le rigolo, car on aime tous l'humour, et aussi sans enjeu sinon de s'amuser et de fêter la dixième année de CPU.
[ Bip, Jingle du jeu des menus, bip, le son revient à vitesse normale] Rappel des scores : [l'équipe] Pixel [a] 3 points, [l'équipe] Vecteur [a] 6 points.
Je vous propose 3 menus plein de vitamines et d'informations croustillantes, 5 fruits et légumes par jour non inclus, il faudra manger sain demain :
- Menu 1 : L'URL, cette chaîne de caractères que vous avez sur tous les navigateurs web mais pas que...
- Menu 2 : Les différents dopants des diodes électroluminescentes, leur composition chimique, les niveaux d'excitations de leurs couches électroniques, leur fréquence de rayonnement et les dépôts de brevets afférents. Un menu qui n'a d'intérêt que si vous êtes Prix Nobel de Physique 2014.
- Menu 3 : Organisation de l'édition 2024 du Futurapolis Planète à Toulouse, avec les noms des différents prestataires captations, le budget catering, le plan de rotation des taxis et les différents numéros de téléphone des hôtels des conférenciers. Un menu qui n'a d'intérêt que si vous êtes organisateur des forums pour l'hebdomadaire Le Point.
[désolé pour la transcription , nous ne donnons que la réponse, en élément caché <details>]
Quels sont les éléments obligatoires dans une URL ?
→ Il n'y en a pasOutre le /, quel symbole délimiteur sépare chaque répertoire dans le path ?
→ On peut mettre n'importe quoi. Par exemple \ sur les serveurs Windows, : sur les serveurs MacIntosh quand ils existaient. Tout dépend de comment le serveur (web, smb,…) est paramétré, tant que c'est ni ? , ni #, ni espace
Quel symbole délimiteur apparait trois fois pour trois éléments différents, et où ?
→ Le: : dans le protocole, entre le nom du serveur et le numéro de port, et entre l'utilisateur et le mot de passe
Si en adresse du serveur, au lieu d'un nom de domaine, je mets un nombre entier, qu'avec des chiffres, que se passe-t-il ?
→ On a la transcription de l'IPv4, mais en décimales. Par exemple2130706433 est équivalent à 127.0.0.1. (Eh oui, je me suis planté à l'enregistrement)
Comment mettre en identifiant de serveur une adresse IPv6 ?
→ Entre crochetsSi je mets un lien sur un site avec en adresse très exactement ceci //toto , que va-t-il se passer ?
→ Il accède au serveur toto avec le protocole et numéro de port que la page d'origine. Donc, depuis notre page web, un lien //toto ira vers https://toto
Quel symbole délimiteur indique que la suite ne concerne que le logiciel client ?
→#
En se limitant exclusivement au jeu de caractère ASCii expressif, donc entre les valeurs décimales 32 et 127 inclus, quel symbole non-échappé est strictement interdit dans une URL ? (oui, je l'avais abordé très vite, mais vous devriez pouvoir répondre facilement)
→ l'espaceEn écartant le protocole data:, quelle est la longueur maximale d'une URL ?
(ben justement)
[Musique de quiz. les joueurs derrière qui font des euuuuh
, pfff
, on peut pas avoir un indice en bas de l'écran ?
, attteeeeennnnds
, je le sais pourtant
. Gong final]
La RFC 2616 donne une réponse qui tient d'une lapalissade : le code de retour HTTP numéro 414 , explicitement le statut URI Too large.
Et c'est tout.
Tenez vous bien : il n'est défini nulle part dans un standard quelle est la longueur maximale d'une URL.
Cette longueur change selon les années, les pratiques et les logiciels. Allez savoir quelle longueur limite les logiciels et équipements réseaux entre votre code en Perl et votre iPhone.
En 2006, j'ai lu un papier passionnant qui donnait les longueur maximales d'URL que pouvaient accepter certains logiciels. Ainsi, en modifiant les paramètres par défaut des serveurs webs de l'époque, on pouvait rallonger la sauce des URL. Les serveurs web Apache, ultra-populaires à ce moment-là, pouvaient accepter des URL faisant jusqu'à 8 000 caractères de long. IIS, le serveur web des Microsoft Windows professionnels, pouvait accepter jusqu'à 16 000 caractères.
C'était en 2006. Actuellement, près de 20 années après, le serveur IIS peut accepter jusqu'à 65 000 caractères, et Apache aller bien au-delà de 100 000 caractères de long, tout comme NGinx.
Côté navigateur web, selon cette étude de 2006, les limites de Safari étaient 80 000 octets, Opera : 190 000 octets, Internet explorer 6 : 2 000 octets. À l'heure actuelle, les maxima sont de 65 000 octets sur Firefox, 80 000 pour Safari et 2 Mo pour Chrome, longueur maximale mesurée par un procédé empirique et drôle.
Oui, la limite de 2 Ko, 2 000 octets maximum dans une URL, communément admise était dûe à… Internet Explorer 6. Dès la version suivante, Internet Explorer 7 qui est sorti en 2006, cette longueur fut plus grande. Bon, pour être honnête, je n'ai pas testé les longueurs des ancêtres des smartphones de l'époque, les navigateurs WAP étaient trèèèèèèès limités.
Bref. Cette limite est actuellement obsolète.
Et pourtant…
Souvent je lis encore sur des forums de devs où la question de la limite de taille est posée cette réponse des 2 000 octets. Je rappelle qu'on a enterré Internet Explorer en début d'année 2021, sans fleurs ni couronnes, c'était au fond d'une forêt de l'Oregon par une nuit sans lune. Vous devriez vous méfier : À leur rappeler les limites de MSIE, les développeurs de Microsoft Edge deviennent chatouilleux et ils ont le coup de pelle facile.
Néanmoins, il y a des interlocuteurs entre votre navigateur web et un serveur web, mais depuis qu'on est passé à des communications chiffrées de bout en bout, la seule limite qui importe pour ces intermédiaires concerne surtout la longueur maximale du nom de domaine. Points inclus et punycode déchiffré (je vais y venir au punycode), la longueur maximale est de 253 caractères , dont 63 caractères maximum par label, c'est à dire le mot entre chaque point dans un nom de domaine.
Bon, ceci dit, est-ce que des URL aussi longues sont pratiques ?
Ça dépend. Cela va très vite : il suffit qu'on vous donne un identifiant utilisateur avant le nom de domaine du serveur, qu'on aie un chemin un peu long, beaucoup d'atomes dans la query, par exemple pour faire du tracking d'audience, et des paramètre de documents dans le hash.
Ces longueurs d'adresses peu usuelles, j'en ai expérimentée une récemment par pur hasard : Alors que je travaillais dans une agence sur un site web pour en rafraîchir la maquette, j'ai été par erreur mis à la porte d'Adobe XD. Le service d'Adobe m'a alors renvoyé sur la page de connexion, avec une URL… très longue : 5 664 caractères !
C'est presque un record pour moi. Mais ce qui était passionnant à mes yeux, c'est ce qui faisait la longueur de cette URL : j'ai relevé dans la query 11 références à des noms de domaines commençant explicitement par https%3A%2F%2F (https://). Là, y'a comme un gros warning qui s'allume dans la partie de ton cortex qui s'occupe de la sécurité informatique. Pourquoi mettre ces 11 URL avec les références aux projets, à l'espace client et la page de connexion ? Genre, tu pouvais pas utiliser qu'un cookie de session pour t'en souvenir ? J'imagine qu'on peut s'amuser à forger des liens dans les e-mails, et du coup, on peut sûrement hameçonner des clients d'Adobe depuis leur propres serveurs.
On va bientôt voir qu'Adobe est très loin de respecter les bonnes pratiques en conception d'URL et même de page web.
Ça serait bien d'éviter de mettre trop de choses, de ne pas oublier d'être concis dans vos URL. Pas d'être hyper-concis au point d'être illisible, n'oubliez pas non plus qu'une URL doit pouvoir aussi être comprise par un humain, et qu'il sera toujours tenté de bricoler un peu avec. (à ses risques et périls).
Je suis sûr que le Shift Project ou l'ADEME vont arriver à nous prouver de manière erronée que les URL longues que vous appelez dans la journée créent plus de CO₂ que la combustion d'une cigarette, mais blague à part, sérieusement, entre nous…
Comme pour les parties facultatives des URL, vérifiez si vous pouvez réduire sans impacter les ressources, nettoyer aussi les query de tracking…
C'est une bête question d'hygiène : KISS, keep it simple stupid, allez à l'essentiel !
Textes : Da Scritch
Joueurs : Olivier Azeau, Nathalie Rosenberg, Sylvain Wallez et Solarus
Arbitre de touche : Gabriel
Partie quiz enregistrée au sein du Tetalab, merci à eux.
Illustration sonore : Jingle vocal pour La Sept par Sylvie Caspar
Photo : Jacob's Ladder CC-By David Stanley