Passa al contenuto principale

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)​

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​

SchemaScopoEsempio
httpProtocollo HTTPhttp://www.example.com/
httpsHTTP sicurohttps://www.example.com/
ftpTrasferimento fileftp://ftp.example.com/file.txt
mailtoPosta elettronicamailto:[email protected]
fileFile localefile:///path/to/file
dataDati inlinedata:text/plain;base64,SGVsbG8=
telTelefonotel:+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​

ConcettoFocusPersistenzaEsempio
URIIdentificazioneNon garantitaTutti gli URI
URLPosizioneDipendente dalla posizionehttp://example.com/page
URNNomePersistenteurn: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