RFC 3986 - Uniform Resource Identifier (URI): Sintassi Generica
- Stato: Internet Standard
- Pubblicato: January 2005
- Stream: IETF
- Aggiorna: RFC1738
- Sostituisce: RFC1808, RFC2396, RFC2732
- Errata: Nessun errata
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
"è" (italiano) → %C3%A8
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)
Glossary (Glossario)
Definizioni dei termini URI chiave utilizzati in RFC 3986.
A
Absolute URI (URI assoluto)
URI che contiene uno schema ma non un frammento. Utilizzato per identificare indipendentemente una risorsa.
Authority (Autorità)
Componente URI che contiene informazioni utente, host e porta. Formato: [userinfo@]host[:port]
B
Base URI (URI di base)
URI assoluto utilizzato per risolvere i riferimenti relativi.
C
Character Encoding (Codifica dei caratteri)
Corrispondenza tra caratteri e ottetti.
D
Dereference (Dereferenziazione)
Esecuzione di un'operazione sulla risorsa designata da un URI, tramite un meccanismo di accesso.
Dot Segment (Segmento punto)
Segmento di percorso . o .., utilizzato per la navigazione nei percorsi relativi.
F
Fragment (Frammento)
Componente URI opzionale, separato da #, che identifica una risorsa secondaria.
G
gen-delims (delimitatori generali)
Sottoinsieme di caratteri riservati: : / ? # [ ] @
H
Host
Parte del componente autorità, può essere un indirizzo IP o un nome di dominio.
hier-part (parte gerarchica)
Struttura principale dell'URI, contiene autorità e percorso.
Hierarchical Identifiers (Identificatori gerarchici)
La sintassi URI è organizzata gerarchicamente da sinistra a destra, in ordine di importanza decrescente.
I
IRI (Identificatore di risorsa internazionalizzato)
Estensione URI che consente l'uso di caratteri Unicode (RFC 3987).
L
Late-Binding (Associazione tardiva)
Il risultato di un riferimento URI è generalmente determinato al momento dell'accesso e può variare nel tempo o con altri aspetti dell'interazione.
N
Normalization (Normalizzazione)
Processo di conversione di un URI in una forma canonica per consentirne il confronto.
P
Path (Percorso)
Componente URI che identifica una risorsa nell'ambito dell'autorità.
Percent-Encoding (Codifica percentuale)
Codifica di caratteri utilizzando % seguito da due cifre esadecimali.
Port (Porta)
Componente autorità opzionale che specifica una porta di rete.
Q
Query
Componente URI opzionale, separato da ?, che trasmette dati non gerarchici.
R
Reserved Characters (Caratteri riservati)
Insieme di caratteri con significato speciale negli URI.
Relative Reference (Riferimento relativo)
Riferimento URI che non inizia con uno schema, risolto rispetto a un URI di base.
Representation (Rappresentazione)
Registrazione dello stato di una risorsa in un dato momento.
Resolution (Risoluzione)
Processo di conversione di un riferimento relativo in un URI assoluto.
Retrieval (Recupero)
Ottenimento, tramite un URI, di una rappresentazione della risorsa associata.
S
Same-Document Reference (Riferimento allo stesso documento)
Riferimento costituito da una stringa vuota o dal solo componente frammento.
Scheme (Schema)
Primo componente di un URI che definisce lo spazio dei nomi dell'identificatore.
Scheme-Based Normalization (Normalizzazione basata sullo schema)
Applicazione di regole specifiche dello schema, ad esempio l'aggiunta della porta predefinita :80 per gli URI HTTP.
Simple String Comparison (Confronto semplice di stringhe)
Confronto carattere per carattere di due URI.
sub-delims (sotto-delimitatori)
Sottoinsieme di caratteri riservati: ! $ & ' ( ) * + , ; =
Syntax-Based Normalization (Normalizzazione basata sulla sintassi)
Applicazione di regole di normalizzazione indipendenti dallo schema: normalizzazione delle maiuscole/minuscole (schema e host non distinguono maiuscole e minuscole), normalizzazione della codifica percentuale e normalizzazione dei segmenti di percorso (rimozione di . e ..).
T
Transcription (Trascrizione)
Gli URI sono progettati per la trascrizione su scala mondiale, utilizzando un insieme ristretto di caratteri per facilitare l'immissione tra lingue e regioni diverse.
U
Unreserved Characters (Caratteri non riservati)
Caratteri che possono essere utilizzati negli URI senza uso riservato: A-Z a-z 0-9 - . _ ~
URI (Identificatore di risorsa uniforme)
Sequenza di caratteri compatta che identifica una risorsa astratta o fisica.
URI Reference (Riferimento URI)
URI o riferimento relativo.
URL (Localizzatore di risorsa uniforme)
Sottoinsieme di URI che fornisce un meccanismo di accesso.
URN (Nome di risorsa uniforme)
Identificatore persistente e indipendente dalla posizione.
Userinfo (Informazioni utente)
Parte opzionale del componente autorità, prima di @.
Ritorna: Pagina iniziale RFC 3986