web-dev-qa-db-fra.com

Pourquoi les URL de fichier commencent-elles par 3 barres obliques?

HTTP commence par deux barres obliques. Par exemple. http://example.com.

Même chose pour FTP. Par exemple. ftp://example.com.

Toutefois, les "URL" de fichiers commencent par trois barres obliques. Par exemple. En lisant un fichier pdf en utilisant chrome, l’URL serait file:///D:/Desktop/Book.pdf.

Pourquoi les URL de fichier utilisent-elles trois barres obliques?

183
Pacerier

Comme d'autres l'ont mentionné, le schéma de fichier se présente sous la forme "fichier: // <hôte>/<chemin>". Bien que la plupart des navigateurs n'auront pas de problème avec seulement deux barres obliques, et à juste titre.

Toutes choses étant égales par ailleurs, la triple barre oblique et le mot clé "localhost" n'existent que pour garantir la conformité avec la syntaxe URI/URL valide. Dans le contexte du schéma de fichier, l'hôte n'a pas de sens puisqu'il se charge directement à partir d'un système de fichiers sans protocole de transfert explicite ni chemin du document du serveur. Comme ce n'est pas HTTP, il ne peut pas être chargé depuis un serveur Web standard où plusieurs hôtes virtuels locaux pourraient en théorie être configurés. Et il ne peut pas charger à partir d'un volume réseau standard qui est techniquement un autre "hôte", car le navigateur utilise simplement le nom du volume tel que "fichier: /// volumes/foo". Enfin, essayer des choses comme "fichier: //exemple.com/some/fichier" ne fonctionne pas. Il y a probablement une raison pour soutenir un hôte externe, mais je ne peux en penser à aucun.

L'IETF élabore actuellement des modifications visant à supprimer l'exigence de triple barre oblique, bien que le projet ajoute également quelques possibilités étranges, telles que file:c|/path et même file://///Host.example.com/path.

https://tools.ietf.org/html/draft-ietf-appsawg-file-scheme-03

"3. La présente spécification ne définit ni n'interdit un mécanisme permettant d'accéder à des fichiers non locaux."

14
Beejor

La syntaxe complète est file://Host/path.

Si l'hôte est localhost, vous pouvez l'omettre, résultant en file:///path.

Voir RFC 1738 - Localisateurs de ressources uniformes (URL) :

Une URL de fichier prend la forme:

file://<Host>/<path>

[…]

<Host> peut être la chaîne "localhost" ou la chaîne vide; ceci est interprété comme "la machine à partir de laquelle l'URL est interprétée".

250
Dennis

Dennis a expliqué la 3ème barre oblique, nécessaire pour séparer la Host de la path, mais les deux autres sont beaucoup plus intéressantes ...

Il s’avère qu’ils constituaient un ajout inutile et quelque peu arbitraire à la syntaxe de l’URL. Tim Berners-Lee, inventeur du World Wide Web et auteur de bon nombre de ses normes (y compris le RFC auquel Dennis était lié), a déploré son utilisation de la "double barre" dans une interview en 2009.

La double barre oblique, bien qu’une convention de programmation à l’époque, s’est avérée inutile, a expliqué M. Berners-Lee. Regardez tous les papiers et les arbres qui auraient pu être sauvés si les gens n’avaient pas eu à écrire ou à taper ces barres au fil des ans - sans parler du travail humain et du temps passé à taper ces deux frappes au clavier fois dans les zones d'adresse du navigateur.

http://bits.blogs.nytimes.com/2009/10/12/the-webs-inventor-regrets-one-small-thing/

Donc, à l'exception d'une erreur mineure (et inhabituelle) dans la prévision il y a environ 18 ans, l'URL de votre fichier aurait simplement pu être file:/D:/Desktop/Book.pdf, plutôt que file:///D:/Desktop/Book.pdf.

Pour répondre à votre question, il n’ya aucune bonne raison pour laquelle les URL comportent 3 barres obliques.


Mise à jour: Comme @ComFreek l'indique dans les commentaires, à partir de 2017, l'exemple file:/D:/... ci-dessus est maintenant valide! C’est grâce à RFC 8089 , qui appelle spécifiquement ce correctif de la norme précédente ...

Selon la définition donnée dans la [RFC1738], une URL de fichier commençait toujours par le jeton "file: //", suivi d'un nom d'hôte (éventuellement vide) et d'un "/". La syntaxe donnée dans la section 2 rend tout le composant d'autorité, y compris les doubles barres obliques "//", facultatif.

Quel temps pour vivre.

27
Molomby