• uri
  • url
  • urn

Svelare URI, URL e URN

Questa guida fornisce una panoramica di URI, URL e URN, spiegando le loro differenze e i casi d'uso.

Darcy Ye
Darcy Ye
Developer

Quando si sviluppano app web, spesso è necessario chiamare diversi servizi web. Durante la configurazione della comunicazione e connessione di diversi servizi web, si incontrano frequentemente i concetti di URI, URL e URN. Di solito, gli utenti trovano difficile distinguerli, portando a un uso misto o errato. In questo articolo, forniremo esempi e spiegheremo le differenze tra di loro per aiutare tutti a comprendere meglio questi concetti e interpretarli e utilizzarli correttamente quando si leggono blog tecnici, documentazione o si comunica con altri ingegneri.

Cos'è un URL?

Un URL (Uniform Resource Locator) fornisce l'indirizzo web o la posizione delle risorse su internet. È tipicamente utilizzato per specificare la posizione di pagine web, file o servizi. Un URL fornisce un formato standardizzato per accedere alle risorse sul web. È un componente chiave della navigazione web, del collegamento e della comunicazione su internet.

Un URL è composto da diverse parti che insieme definiscono l'indirizzo della risorsa e il protocollo utilizzato per accedervi. Prendiamo come esempio l'URL sottostante e spieghiamo una per una la funzione di ciascuna parte.

  1. Schema: Questo specifica il protocollo o lo schema utilizzato per accedere alle risorse, come HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol) o altro.

    Lo schema nell'URL è https.

  2. Host: L'host specifica il nome di dominio o l'indirizzo IP del server che ospita le risorse.

    L'host nell'URL è example.logto.io.

  3. Porta: (Opzionale) La porta rappresenta un numero di porta specifico sull'host che accede alla risorsa. Se non viene specificata alcuna porta, di default viene utilizzata la porta standard per lo schema dato.

    La porta predefinita per HTTP è 80, mentre la porta predefinita per HTTPS è 443.

    La porta nell'URL è 8080.

  4. Percorso: (Opzionale) Il percorso indica la posizione o directory specifica sul server in cui si trova la risorsa, che può includere directory e nomi di file.

    Il percorso dell'URL dovrebbe essere /blogs/index.html.

  5. Parametri di Query: (Opzionale) I parametri di query sono parametri aggiuntivi passati a una risorsa, tipicamente utilizzati nelle applicazioni web dinamiche. Appaiono dopo il percorso e sono separati dal simbolo ?.

    I parametri di query nell'URL sono param1=value1&param2=value2, che è spesso rappresentato sotto forma di coppie chiave-valore, con coppie separate dal simbolo &. Negli scenari di utilizzo reale, spesso è necessaria la codifica per evitare caratteri come spazi.

  6. Identificatore di Frammento: (Opzionale) Può anche essere chiamato ancoraggio, utilizzato per individuare una posizione specifica nella risorsa.

    L'ancoraggio nell'URL è #introduction.

Inoltre, ad esempio, utilizzando servizi di file o molti pulsanti "Contact Us" nelle pagine web sono collegati a URL, come:

  • ftp://documents.logto.io/files/legal/soc_ii.pdf
  • mailto:[email protected]?subject=Enterprise%20quota%20request

Cos'è un URI?

URI sta per "Uniform Resource Identifier". È una stringa di caratteri che identifica una risorsa specifica, come una pagina web, un file o un servizio. URI fornisce un modo per identificare e localizzare univocamente le risorse utilizzando un formato standardizzato.

Un URI è composto principalmente da due componenti:

  1. Schema: Indica il protocollo o lo schema utilizzato per accedere alla risorsa.
  2. Identificatore di Risorsa: Identifica la risorsa specifica a cui si sta accedendo o a cui si fa riferimento. Il formato dell'identificatore della risorsa dipende dallo schema utilizzato.

Da una prospettiva grammaticale, gli URI seguono per lo più lo stesso formato degli URL, come specificato in RFC 3986.

Sebbene questo formato URI sia simile a quello degli URL, non garantisce l'accesso a una risorsa su Web. Utilizzare questo formato può ridurre i conflitti di nomi di spazi.

Nella sezione precedente, abbiamo introdotto gli URL, che non solo identificano una risorsa ma aiutano anche a locare quella risorsa. Quindi, in effetti, gli URL sono un vero sottoinsieme degli URI.

Cos'è un URN?

L'URN potrebbe non essere così comune come URL e URI. Sta per "Uniform Resource Name", e il suo scopo è identificare le risorse in modo persistente, anche se tali risorse non esistono più.

A differenza di un URL, un URN non fornisce alcuna informazione su come localizzare la risorsa; si limita a identificarla, proprio come un URI puro. Specificamente, un URN è un tipo di URI con lo schema "urn" e ha la seguente struttura, come descritto in RFC 2141:

<URN>:<NID>:<NSS>

  1. URN: Solitamente urn.

  2. Identificatore di Namespace (NID): Rappresenta un namespace o un sistema identificativo univoco che definisce e gestisce l'URN. Fornisce contesto e garantisce l'unicità dell'identificatore. Esempi di namespace includono ISBN (International Standard Book Number), ecc.

  3. Stringa Specifica di Namespace (NSS): È una stringa di caratteri che identifica univocamente una risorsa all'interno del namespace specificato. L'identificatore stesso non fornisce alcuna informazione sulla posizione o il metodo di accesso alla risorsa.

Ad esempio, un libro molto famoso che introduce i sistemi informatici CSAPP ha il suo numero ISBN rappresentato come URN urn:isbn:9780134092669.

Gli URN sono spesso utilizzati in vari protocolli standard, come l'asserzione nel protocollo SAML, che corrisponde all'URN urn:oasis:names:tc:SAML:2.0:assertion.

Nell'ingegneria del software, possiamo anche definire URN per scopi specifici nei nostri sistemi secondo le regole di denominazione URN. Ad esempio, in Logto, per abilitare Organization, è necessario aggiungere l'ambito urn:logto:scope:organizations nella configurazione quando si utilizza il SDK. Ogni Organization ha anche il suo URN dedicato urn:logto:organization:{orgId}.

Conclusione

La relazione tra URI, URL e URN può essere illustrata utilizzando il seguente diagramma di Venn:

Relazioni

URI, URL e URN possono essere tutti utilizzati per identificare diverse risorse, ma solo l'URL può identificare con precisione la posizione della risorsa.

URI e URL possono supportare vari schemi, come HTTP, HTTPS, FTP, ma l'URN può essere considerato supportare solo lo schema urn.

Tutti gli URL o URN sono URI, ma non tutti gli URI sono URL o URN.