Domanda Qual è la differenza tra un URI, un URL e un URN?


La gente parla di URLS, URIs e URNAs come se fossero cose diverse, ma sembrano uguali a occhio nudo.

Quali sono le differenze distinguibili tra loro?


3704
2017-10-06 21:26


origine


risposte:


A partire dal RFC 3986:

Un URI può essere ulteriormente classificato come un localizzatore, un nome o entrambi. Il      termine "Uniform Resource Locator" (URL) si riferisce al sottoinsieme di URI      che oltre a identificare una risorsa, fornire un mezzo di      localizzare la risorsa descrivendo il suo meccanismo di accesso primario      (ad esempio, la sua "posizione" di rete). Il termine "Uniform Resource Name"      (URN) è stato usato storicamente per riferirsi a entrambi gli URI sotto il      schema "urna" [RFC2141], che sono tenuti a rimanere globalmente unici      e persistente anche quando la risorsa cessa di esistere o diventa      non disponibile e a qualsiasi altro URI con le proprietà di un nome.

Quindi tutti gli URL sono URI (in realtà non del tutto - vedi sotto), e tutti gli URN sono URI - ma URN e URL sono diversi, quindi non si può dire che tutti gli URI siano URL.

EDIT: avevo già pensato che tutti gli URL fossero URI validi, ma come da commenti:

Non "tutti gli URL sono URI". Dipende dall'interpretazione della RFC. Ad esempio in Java il parser URI non piace [ o ] ed è perché la specifica dice "non dovrebbe" e non "non deve".

In modo che infanghi ulteriormente le acque, sfortunatamente.

Se non hai già letto La risposta di Roger Pate, Consiglierei di farlo anche


1515
2017-10-06 21:29



URIs identifica e URLs individuare; però, i localizzatori sono anche identificatori, quindi ogni URL è anche un URI, ma ci sono URI che non sono URL.

Esempi

  • Roger Pate

Questo è il mio nome, che è un identificatore. È come un URI, ma non può essere un URL, in quanto non ti dice nulla sulla mia posizione o su come contattarmi. In questo caso capita anche di identificare almeno altre 5 persone negli Stati Uniti da soli.

  • 4914 West Bay Street, Nassau, Bahamas

Questo è un localizzatore, che è un identificatore per quella posizione fisica. È come sia un URL che un URI (dato che tutti gli URL sono URI), e inoltre mi identifica indirettamente come "residente di ..". In questo caso, mi identifica in modo univoco, ma cambierebbe se ricevessi un compagno di stanza.

Dico "mi piace" perché questi esempi non seguono la sintassi richiesta.

Confusione popolare

A partire dal Wikipedia:

Nel calcolo, un URL (Uniform Resource Locator) è un sottoinsieme dell'Uniform Resource Identifier (URI) che specifica dove è disponibile una risorsa identificata e il meccanismo per recuperarla. Nell'uso popolare e in molti documenti tecnici e discussioni verbali è spesso usato in modo errato come sinonimo di URI, ... [enfasi mia]

A causa di questa comune confusione, molti prodotti e documentazione utilizzano erroneamente un termine anziché l'altro, assegnano la propria distinzione o li utilizzano come sinonimi.

URN

Il mio nome, Roger Pate, potrebbe essere come un URNA (Nome risorsa uniforme), ad eccezione di quelli molto più regolamentato e destinato ad essere unico in tutto entrambi spazio e tempo.

Poiché attualmente condivido questo nome con altre persone, non è globalmente unico e non sarebbe appropriato come URN. Tuttavia, anche se nessun'altra famiglia ha usato questo nome, ho preso il nome da mio nonno paterno, quindi non sarebbe stato unico nel tempo. E anche se quella non era il caso, la possibilità di nominare i miei discendenti dopo di me rende questo non adatto come un URN.

Gli URN sono diversi dagli URL in questo rigido vincolo di unicità, anche se entrambi condividono la sintassi degli URI.


3524
2017-12-31 06:32



URI - Identificatore di risorse uniformi

Gli URI sono uno standard per identificare i documenti usando una breve stringa di numeri, lettere e simboli. Sono definiti da RFC 3986 - URI (Uniform Resource Identifier): sintassi generica. URL, URN e URC sono tutti tipi di URI.

URL - Localizzatore di risorse uniformi

Contiene informazioni su come recuperare una risorsa dalla sua posizione. Per esempio:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (Un URL relativo, utile solo nel contesto di un altro URL)

Gli URL iniziano sempre con un protocollo (http) e di solito contengono informazioni come il nome host di rete (example.com) e spesso un percorso del documento (/foo/mypage.html). Gli URL possono avere parametri di query e identificatori di frammento.

URN - Nome risorsa uniforme

Identifica una risorsa con un nome univoco e persistente, ma non indica necessariamente come localizzarla su Internet. Di solito inizia con il prefisso urn:  Per esempio:

  • urn:isbn:0451450523 identificare un libro dal suo numero ISBN.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 un identificatore univoco globale
  • urn:publishing:book - Uno spazio dei nomi XML che identifica il documento come un tipo di libro.

Gli URN possono identificare idee e concetti. Non si limitano a identificare i documenti. Quando un URN rappresenta un documento, può essere tradotto in un URL da un "resolver". Il documento può quindi essere scaricato dall'URL.

URC - Citazione uniforme delle risorse

Indica i metadati relativi a un documento piuttosto che al documento stesso. Un esempio di URC è uno che punta al codice sorgente HTML di una pagina come: view-source:http://example.com/

URI di dati

Piuttosto che localizzarlo su internet, o nominarlo, i dati possono essere inseriti direttamente in un URI. Un esempio potrebbe essere data:,Hello%20World.


Domande frequenti

Ho sentito che non dovrei più dire URL, perché?

La specifica W3 per HTML dice che il href di un tag di ancoraggio può contenere un URI, non solo un URL. Dovresti essere in grado di inserire un URN come <a href="urn:isbn:0451450523">. Il tuo browser risolverebbe quindi URN su un URL e scaricherà il libro per te.

Qualche browser in realtà sa come recuperare documenti da URN?

Non che io sappia, ma il moderno browser web implementa lo schema URI di dati.

La differenza tra URL e URI ha qualcosa a che fare con la relativa o assoluta?

No. Sia gli URL relativi sia quelli assoluti sono URL (e URI).

La differenza tra URL e URI ha qualcosa a che fare con i parametri di query?

No. Entrambi gli URL con e senza parametri di query sono URL (e URI).

La differenza tra URL e URI ha qualcosa a che fare con se ha un identificatore di frammento?

No. Entrambi gli URL con e senza identificatori di frammenti sono URL (e URI).

La differenza tra URL e URI ha qualcosa a che fare con quali caratteri sono permessi?

No. Gli URL sono definiti come un sottoinsieme ristretto di URI. Se un parser consente un carattere in un URL ma non in un URI, c'è un bug nel parser. Le specifiche descrivono in dettaglio i caratteri consentiti in quali parti di URL e URI. Alcuni caratteri possono essere consentiti solo in alcune parti dell'URL, ma i caratteri da soli non sono una differenza tra URL e URI.

Ma il W3C non dice ora che URL e URI sono la stessa cosa?

Sì. Il W3C si è reso conto che c'è un sacco di confusione su questo. Hanno emesso un Documento di chiarimento URI che dice che ora è OK usare i termini URL e URI in modo intercambiabile (per significare URI). Non è più utile segmentare rigorosamente gli URI in tipi diversi come URL, URN e URC.

Un URI può essere sia un URL che un URN?

La definizione di URN è ora più flessibile di quanto ho affermato sopra. Il ultimo RFC sugli URI dice che qualsiasi URI può ora essere un URN (indipendentemente dal fatto che inizi con urn:) purché abbia "le proprietà di un nome". Cioè: è globalmente unico e persistente anche quando la risorsa cessa di esistere o diventa non disponibile. Un esempio: gli URI utilizzati nei doctype HTML come http://www.w3.org/TR/html4/strict.dtd. L'URI continuerà a nominare il doctype transitorio HTML4 anche se la pagina sul sito w3.org è stata cancellata.


URI/URL Venn Diagram


474
2018-03-04 21:51



In sintesi: un URI identifica, un URL identifica e individua.

Considera una specifica edizione della commedia di Shakespeare Romeo e Giulietta, di cui hai una copia digitale sulla tua rete domestica.

È possibile identificare il testo come urn:isbn:0-486-27557-4.
Quello sarebbe un URI, ma più specificamente a URNA* perché nomina il testo.

Puoi anche identificare il testo come file://hostname/sharename/RomeoAndJuliet.pdf.
Quello sarebbe anche un URI, ma più specificamente a URL perché individua il testo.

* Nome risorsa uniforme

(Nota che il mio esempio è stato adattato da Wikipedia)


233
2017-12-31 06:51



Queste sono alcune risposte molto ben scritte ma prolifiche. Ecco la differenza per quanto riguarda CodeIgniter:

URL - http://example.com/some/page.html

URI - /some/page.html

In parole povere, l'URL è il modo completo per identificare qualsiasi risorsa ovunque e può avere protocolli diversi come FTP, HTTP, SCP, ecc.

L'URI è una risorsa nel dominio corrente, quindi è necessario trovare meno informazioni.

In ogni istanza che CodeIgniter usa la parola URL o URI questa è la differenza di cui stanno parlando, sebbene nel grande schema del web, non è corretta al 100%.


124
2017-12-31 08:58



Una piccola aggiunta alle risposte già pubblicate, ecco un diagramma di Venn per riassumere la teoria (dal bellissimo di Prateek Joshi spiegazione):

enter image description here

E un esempio (anche dal sito web di Prateek):

enter image description here


64
2017-10-16 17:46



Questo è uno degli argomenti più confusi e probabilmente irrilevanti che ho incontrato come professionista del web.

A quanto ho capito, un URI è una descrizione di qualcosa, seguendo un formato accettato, che può definire sia il nome univoco (identificazione) di qualcosa che la sua posizione.

Esistono due sottoinsiemi di base: gli URL, che definiscono la posizione (in particolare per un browser che cerca di cercare una pagina Web) e gli URN, che definiscono il nome univoco di qualcosa.

Tendo a pensare agli URN come simili ai GUID. Sono semplicemente una metodologia standardizzata per fornire nomi univoci per le cose. Come nel dichiarativo del namespace che usa il nome di una società - non è come se ci fosse una risorsa seduta su un server da qualche parte per corrispondere a quella riga di testo - identifica semplicemente qualcosa in modo univoco.

Tendo anche a evitare completamente il termine URI e discuto le cose solo in termini di URL o URN, a seconda dei casi, perché causa così tanta confusione. La domanda che dovremmo davvero provare a rispondere alle persone non è tanto la semantica, ma come identificare quando si incontrano i termini o meno c'è qualche differenza pratica in essi che cambierà l'approccio a una situazione di programmazione. Ad esempio, se qualcuno mi corregge in una conversazione e dice "oh, questo non è un URL è un URI" So che ne sono pieni. Se qualcuno dice "stiamo usando un URN per definire la risorsa" sono più propenso a capire che lo stiamo solo nominando in modo univoco, non individuandolo su un server.

Se sono fuori dalla base, per favore fatemelo sapere!


52
2017-12-01 13:07



URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

Gli URL sono un sottoinsieme di URI (che contengono anche URN).

Fondamentalmente, un URI è un identificatore generale, in cui un URL specifica una posizione e un URN specifica un nome.


42
2017-10-06 21:30



Prima di tutto fai uscire la mente dalla confusione e prendila semplice e capirai.

URI => Uniform Resource Identifier Identifica un indirizzo completo della risorsa i-e posizione, nome o entrambi.

URL => Uniform Resource Locator Identifica la posizione della risorsa.

URN => Nome risorsa uniforme Identifica il nome della risorsa

Esempio

Abbiamo un indirizzo https://www.google.com/folder/page.html dove,

URI (Uniform Resource Identifier) ​​=> https://www.google.com/folder/page.html

URL (Uniform Resource Locator) => https://www.google.com/

URN (Uniform Resource Name) => /folder/page.html

URI => (URL + URN) o solo URL o solo URN


42
2017-07-21 17:50