Passa al contenuto principale

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)

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
"你" (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

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)