RFC 3986 - Identificateur de Ressource Uniforme (URI) : Syntaxe Générique
- Statut: Internet Standard
- Publié: January 2005
- Stream: IETF
- Met à jour: RFC1738
- Remplace: RFC1808, RFC2396, RFC2732
- Errata: Pas d'errata
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
Glossary (Glossaire)
Définitions des termes URI clés utilisés dans RFC 3986.
A
Absolute URI (URI absolu)
URI contenant un schéma mais pas de fragment. Utilisé pour identifier indépendamment une ressource.
Authority (Autorité)
Composant URI contenant les informations utilisateur, l'hôte et le port. Format: [userinfo@]host[:port]
B
Base URI (URI de base)
URI absolu utilisé pour résoudre les références relatives.
C
Character Encoding (Codage de caractères)
Correspondance entre les caractères et les octets.
D
Dereference (Déréférencement)
Action d'effectuer une opération sur la ressource désignée par un URI, au moyen d'un mécanisme d'accès.
Dot Segment (Segment point)
Segment de chemin . ou .., utilisé pour la navigation en chemin relatif.
F
Fragment
Composant optionnel d'un URI, séparé par #, identifiant une ressource secondaire.
G
gen-delims (délimiteurs généraux)
Sous-ensemble de caractères réservés: : / ? # [ ] @
H
Host (Hôte)
Partie du composant autorité, peut être une adresse IP ou un nom de domaine.
hier-part (partie hiérarchique)
Structure principale de l'URI, contenant l'autorité et le chemin.
Hierarchical Identifiers (Identificateurs hiérarchiques)
La syntaxe des URI est organisée hiérarchiquement de gauche à droite, par ordre d'importance décroissante.
I
IRI (Identificateur de ressource internationalisé)
Extension d'URI permettant l'utilisation de caractères Unicode (RFC 3987).
L
Late-Binding (Liaison tardive)
Le résultat d'une référence URI est généralement déterminé au moment de l'accès et peut varier dans le temps ou selon d'autres aspects de l'interaction.
N
Normalization (Normalisation)
Processus de conversion d'un URI en une forme canonique afin de permettre la comparaison.
P
Path (Chemin)
Composant URI identifiant une ressource dans la portée de l'autorité.
Percent-Encoding (Encodage en pourcentage)
Encodage de caractères utilisant % suivi de deux chiffres hexadécimaux.
Port
Composant d'autorité optionnel spécifiant un port réseau.
Q
Query (Requête)
Composant URI optionnel, séparé par ?, transmettant des données non hiérarchiques.
R
Reserved Characters (Caractères réservés)
Ensemble de caractères ayant une signification spéciale dans les URI.
Relative Reference (Référence relative)
Référence URI ne commençant pas par un schéma, résolue par rapport à un URI de base.
Representation (Représentation)
Enregistrement de l'état d'une ressource à un instant donné.
Resolution (Résolution)
Processus de conversion d'une référence relative en URI absolu.
Retrieval (Récupération)
Obtention, au moyen d'un URI, d'une représentation de la ressource associée.
S
Same-Document Reference (Référence au même document)
Référence constituée d'une chaîne vide ou ne comportant qu'un composant fragment.
Scheme (Schéma)
Premier composant d'un URI définissant l'espace de noms de l'identificateur.
Scheme-Based Normalization (Normalisation fondée sur le schéma)
Application de règles propres au schéma. Exemple: ajout du port par défaut :80 pour les URI HTTP.
Simple String Comparison (Comparaison de chaînes simple)
Comparaison caractère par caractère de deux URI.
sub-delims (sous-délimiteurs)
Sous-ensemble de caractères réservés: ! $ & ' ( ) * + , ; =
Syntax-Based Normalization (Normalisation fondée sur la syntaxe)
Application de règles de normalisation indépendantes du schéma: normalisation de la casse (schéma et hôte insensibles à la casse), normalisation de l'encodage en pourcentage, et normalisation des segments de chemin (suppression de . et ..).
T
Transcription
Les URI sont conçus pour la transcription à l'échelle mondiale, en utilisant un jeu de caractères restreint afin de faciliter la saisie entre langues et régions.
U
Unreserved Characters (Caractères non réservés)
Caractères pouvant être utilisés dans les URI sans usage réservé: A-Z a-z 0-9 - . _ ~
URI (Identificateur de ressource uniforme)
Séquence de caractères compacte identifiant une ressource abstraite ou physique.
URI Reference (Référence URI)
URI ou référence relative.
URL (Localisateur de ressource uniforme)
Sous-ensemble d'URI fournissant un mécanisme d'accès.
URN (Nom de ressource uniforme)
Identificateur persistant et indépendant de l'emplacement.
Userinfo (Informations utilisateur)
Partie optionnelle du composant autorité, avant @.
Retour: Page d'accueil RFC 3986