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)
- Annexe A. ABNF collecté pour URI
- Annexe B. Analyse d'une référence URI avec une expression régulière
- Annexe C. Délimitation d'un URI dans le contexte
- Annexe D. Changements par rapport à RFC 2396
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éma | Usage | Exemple |
|---|---|---|
| http | Protocole HTTP | http://www.example.com/ |
| https | HTTP sécurisé | https://www.example.com/ |
| ftp | Transfert de fichiers | ftp://ftp.example.com/file.txt |
| mailto | Courrier électronique | mailto:[email protected] |
| file | Fichier local | file:///path/to/file |
| data | Données en ligne | data:text/plain;base64,SGVsbG8= |
| tel | Téléphone | tel:+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
| Concept | Focus | Persistance | Exemple |
|---|---|---|---|
| URI | Identification | Non garantie | Tous les URI |
| URL | Localisation | Dépendant de la localisation | http://example.com/page |
| URN | Nom | Persistant | urn: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