Aller au contenu principal

RFC 3986 - Identificateur de Ressource Uniforme (URI) : Syntaxe Générique

Statut : Standard Internet (STD 66)
Met à jour : RFC 1738
Rend obsolète : RFC 2732, 2396, 1808
Auteurs : T. Berners-Lee (W3C/MIT), R. Fielding (Day Software), L. Masinter (Adobe Systems)
Date : Janvier 2005

Résumé

Un Identificateur de Ressource Uniforme (Uniform Resource Identifier, URI) est une séquence compacte de caractères qui identifie une ressource abstraite ou physique.

Cette spécification définit :

  • La syntaxe générique des URI
  • Un processus pour résoudre les références URI qui peuvent être sous forme relative
  • Des directives et considérations de sécurité pour l'utilisation des URI sur Internet

Caractéristiques principales :

  • La syntaxe URI définit une grammaire qui est un surensemble de tous les URI valides
  • Permet aux implémentations d'analyser les composants communs d'une référence URI sans connaître les exigences spécifiques au schéma
  • Ne définit pas une grammaire générative pour les URI ; cette tâche est effectuée par les spécifications individuelles de chaque schéma URI

Importance

La RFC 3986 est au cœur de l'infrastructure Web :

  • 🌐 Définit la syntaxe générique pour les URL et URN
  • 🔗 Fondement de toute localisation de ressources sur le Web
  • 📋 Base pour tous les protocoles incluant HTTP, HTTPS, FTP
  • 🎯 Algorithme de résolution d'URI relatifs
  • 🔒 Considérations de sécurité des URI

Table des matières

1. Introduction

  • 1.1 Vue d'ensemble des URI
    • 1.1.1 Syntaxe générique
    • 1.1.2 Exemples
    • 1.1.3 URI, URL et URN
  • 1.2 Considérations de conception
    • 1.2.1 Transcription
    • 1.2.2 Séparation de l'identification et de l'interaction
    • 1.2.3 Identificateurs hiérarchiques
  • 1.3 Notation syntaxique

2. Caractères (Characters)

  • 2.1 Encodage en pourcentage
  • 2.2 Caractères réservés
  • 2.3 Caractères non réservés
  • 2.4 Quand encoder ou décoder
  • 2.5 Identification des données

3. Composants syntaxiques (Syntax Components)

  • 3.1 Schéma
  • 3.2 Autorité
    • 3.2.1 Information utilisateur
    • 3.2.2 Hôte
    • 3.2.3 Port
  • 3.3 Chemin
  • 3.4 Requête
  • 3.5 Fragment

4. Usage (Utilisation)

  • 4.1 Référence URI
  • 4.2 Référence relative
  • 4.3 URI absolu
  • 4.4 Référence au même document
  • 4.5 Référence suffixe

5. Résolution de référence (Reference Resolution)

  • 5.1 Établissement d'un URI de base
  • 5.2 Résolution relative
  • 5.3 Recomposition des composants
  • 5.4 Exemples de résolution de référence

6. Normalisation et comparaison (Normalization and Comparison)

  • 6.1 Équivalence
  • 6.2 Échelle de comparaison

7. Considérations de sécurité (Security Considerations)

  • 7.1 Fiabilité et cohérence
  • 7.2 Construction malveillante
  • 7.3 Transcodage backend
  • 7.4 Formats d'adresse IP rares
  • 7.5 Informations sensibles
  • 7.6 Attaques sémantiques

8. Considérations IANA (IANA Considerations)

9. Remerciements (Acknowledgements)

10. Références (References)

Annexes (Appendices)

Référence rapide

Syntaxe générique des URI

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty

Exemple de composants URI

  foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment

Schémas URI courants

SchémaUsageExemple
httpProtocole HTTPhttp://www.example.com/
httpsHTTP sécuriséhttps://www.example.com/
ftpTransfert de fichiersftp://ftp.example.com/file.txt
mailtoCourrier électroniquemailto:[email protected]
fileFichier localfile:///path/to/file
dataDonnées en lignedata:text/plain;base64,SGVsbG8=
telTéléphonetel:+1-800-555-1212

Caractères réservés

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="

Caractères non réservés

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"

Encodage en pourcentage

pct-encoded = "%" HEXDIG HEXDIG

Exemples :
Espace → %20
"你" (chinois) → %E4%BD%A0

URI vs URL vs URN

Diagramme de relation

        URI (Identificateur de Ressource Uniforme)
/ \
URL URN
(Localisateur de Ressource Uniforme) (Nom de Ressource Uniforme)
(Comment accéder) (Ce que c'est)

Comparaison

ConceptFocusPersistanceExemple
URIIdentificationNon garantieTous les URI
URLLocalisationDépendant de la localisationhttp://example.com/page
URNNomPersistanturn:isbn:0-486-27557-4

Important : Tous les URL sont des URI, tous les URN sont des URI, mais tous les URI ne sont pas des URL ou des URN.

Exigences d'implémentation

Doit implémenter (MUST)

  • ✅ Analyse de syntaxe URI de base
  • ✅ Traitement correct de l'encodage en pourcentage
  • ✅ Algorithme de résolution d'URI relatif
  • ✅ Schéma et hôte insensibles à la casse
  • ✅ Suppression des segments de points dans les chemins

Devrait implémenter (SHOULD)

  • ✅ Normalisation URI
  • ✅ Support IRI (Identificateurs de Ressources Internationalisés)
  • ✅ Support d'adresses IPv6
  • ✅ Gestion sécurisée des informations utilisateur

Peut implémenter (MAY)

  • Validation spécifique au schéma
  • Comparaison d'équivalence URI
  • Normalisation automatique

RFC connexes

  • RFC 1738 : Spécification URL (mis à jour)
  • RFC 2396 : Syntaxe générique URI (rendu obsolète)
  • RFC 2732 : Format d'adresse IPv6 (rendu obsolète)
  • RFC 3987 : IRI (Identificateurs de Ressources Internationalisés)
  • RFC 6874 : Identificateurs de zone IPv6
  • RFC 7230 : Syntaxe de message HTTP/1.1
  • RFC 8820 : Conception et propriété URI

Ressources en ligne


Chapitre suivant : 1. Introduction