RFC 3986 - Uniform Resource Identifier (URI): Sintassi Generica
Stato: Standard Internet (STD 66)
Aggiorna: RFC 1738
Rende obsoleto: RFC 2732, 2396, 1808
Autori: T. Berners-Lee (W3C/MIT), R. Fielding (Day Software), L. Masinter (Adobe Systems)
Data: Gennaio 2005
Sommario
Un Uniform Resource Identifier (URI) è una sequenza compatta di caratteri che identifica una risorsa astratta o fisica.
Questa specifica definisce:
- La sintassi generica degli URI
- Un processo per risolvere i riferimenti URI che potrebbero essere in forma relativa
- Linee guida e considerazioni sulla sicurezza per l'uso degli URI su Internet
Caratteristiche principali:
- La sintassi URI definisce una grammatica che è un sovrainsieme di tutti gli URI validi
- Consente alle implementazioni di analizzare i componenti comuni di un riferimento URI senza conoscere i requisiti specifici dello schema di ogni possibile identificatore
- Non definisce una grammatica generativa per gli URI; tale compito è svolto dalle specifiche individuali di ciascuno schema URI
Importanza
RFC 3986 è il cuore dell'infrastruttura Web:
- 🌐 Definisce la sintassi generica per URL e URN
- 🔗 Fondamento per tutta la localizzazione delle risorse sul Web
- 📋 Base per tutti i protocolli inclusi HTTP, HTTPS, FTP
- 🎯 Algoritmo di risoluzione URI relativo
- 🔒 Considerazioni sulla sicurezza degli URI
Indice
1. Introduzione (Introduction)
- 1.1 Panoramica degli URI
- 1.1.1 Sintassi generica
- 1.1.2 Esempi
- 1.1.3 URI, URL e URN
- 1.2 Considerazioni di progettazione
- 1.2.1 Trascrizione
- 1.2.2 Separazione tra identificazione e interazione
- 1.2.3 Identificatori gerarchici
- 1.3 Notazione sintattica
2. Caratteri (Characters)
- 2.1 Codifica percentuale
- 2.2 Caratteri riservati
- 2.3 Caratteri non riservati
- 2.4 Quando codificare o decodificare
- 2.5 Identificazione dei dati
3. Componenti sintattici (Syntax Components)
- 3.1 Schema
- 3.2 Autorità
- 3.2.1 Informazioni utente
- 3.2.2 Host
- 3.2.3 Porta
- 3.3 Percorso
- 3.4 Query
- 3.5 Frammento
4. Utilizzo (Usage)
- 4.1 Riferimento URI
- 4.2 Riferimento relativo
- 4.3 URI assoluto
- 4.4 Riferimento allo stesso documento
- 4.5 Riferimento suffisso
5. Risoluzione dei riferimenti (Reference Resolution)
- 5.1 Stabilire un URI di base
- 5.2 Risoluzione relativa
- 5.3 Ricomposizione dei componenti
- 5.4 Esempi di risoluzione dei riferimenti
6. Normalizzazione e confronto (Normalization and Comparison)
- 6.1 Equivalenza
- 6.2 Scala di confronto
7. Considerazioni sulla sicurezza (Security Considerations)
- 7.1 Affidabilità e coerenza
- 7.2 Costruzione maliziosa
- 7.3 Transcodifica backend
- 7.4 Formati di indirizzi IP rari
- 7.5 Informazioni sensibili
- 7.6 Attacchi semantici
8. Considerazioni IANA (IANA Considerations)
9. Ringraziamenti (Acknowledgements)
10. Riferimenti (References)
Appendici (Appendices)
- Appendice A. ABNF raccolto per URI
- Appendice B. Analisi di un riferimento URI con espressione regolare
- Appendice C. Delimitazione di un URI nel contesto
- Appendice D. Modifiche rispetto a RFC 2396
Riferimento rapido
Sintassi generica URI
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
Esempio di componenti URI
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
Schemi URI comuni
| Schema | Scopo | Esempio |
|---|---|---|
| http | Protocollo HTTP | http://www.example.com/ |
| https | HTTP sicuro | https://www.example.com/ |
| ftp | Trasferimento file | ftp://ftp.example.com/file.txt |
| mailto | Posta elettronica | mailto:[email protected] |
| file | File locale | file:///path/to/file |
| data | Dati inline | data:text/plain;base64,SGVsbG8= |
| tel | Telefono | tel:+1-800-555-1212 |
Caratteri riservati
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Caratteri non riservati
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
Codifica percentuale
pct-encoded = "%" HEXDIG HEXDIG
Esempi:
Spazio → %20
"你" (cinese) → %E4%BD%A0
URI vs URL vs URN
Diagramma di relazione
URI (Uniform Resource Identifier)
/ \
URL URN
(Uniform Resource Locator) (Uniform Resource Name)
(Come accedere) (Cosa è)
Confronto
| Concetto | Focus | Persistenza | Esempio |
|---|---|---|---|
| URI | Identificazione | Non garantita | Tutti gli URI |
| URL | Posizione | Dipendente dalla posizione | http://example.com/page |
| URN | Nome | Persistente | urn:isbn:0-486-27557-4 |
Importante: Tutti gli URL sono URI, tutti gli URN sono URI, ma non tutti gli URI sono URL o URN.
Requisiti di implementazione
Deve implementare (MUST)
- ✅ Analisi sintassi URI di base
- ✅ Gestione corretta della codifica percentuale
- ✅ Algoritmo di risoluzione URI relativo
- ✅ Schema e host indipendenti da maiuscole/minuscole
- ✅ Rimozione di segmenti punto nei percorsi
Dovrebbe implementare (SHOULD)
- ✅ Normalizzazione URI
- ✅ Supporto IRI (Identificatori di Risorse Internazionalizzati)
- ✅ Supporto indirizzi IPv6
- ✅ Gestione sicura delle informazioni utente
Può implementare (MAY)
- Validazione specifica dello schema
- Confronto di equivalenza URI
- Normalizzazione automatica
RFC correlati
- RFC 1738: Specifica URL (aggiornato)
- RFC 2396: Sintassi generica URI (reso obsoleto)
- RFC 2732: Formato indirizzo IPv6 (reso obsoleto)
- RFC 3987: IRI (Identificatori di Risorse Internazionalizzati)
- RFC 6874: Identificatori di zona IPv6
- RFC 7230: Sintassi messaggio HTTP/1.1
- RFC 8820: Progettazione e proprietà URI
Risorse online
Capitolo successivo: 1. Introduzione (Introduction)