¿Cuál es la diferencia entre un URI, una URL y una URN?

La gente habla de URL , URI y URN como si fueran cosas diferentes, pero se ven igual a simple vista.

¿Cuáles son las diferencias distinguibles entre ellos?

De RFC 3986 :

Un URI se puede clasificar además como un localizador, un nombre o ambos. El término “Localizador uniforme de recursos” (URL) se refiere al subconjunto de URI que, además de identificar un recurso, proporciona un medio para ubicar el recurso describiendo su mecanismo de acceso primario (por ejemplo, su “ubicación” de red). El término “Nombre de recurso uniforme” (URN) se ha utilizado históricamente para referirse a ambos URI bajo el esquema “urna” [RFC2141], que deben permanecer globalmente únicos y persistentes incluso cuando el recurso deja de existir o deja de estar disponible, y a cualquier otro URI con las propiedades de un nombre.

Por lo tanto, todas las URL son URI (en realidad no del todo; consulte más abajo), y todas las URN son URI, pero las URN y las URL son diferentes, por lo que no puede decir que todas las URI son URL.

EDIT: antes pensaba que todas las URL son URI válidas, pero según los comentarios:

No “todas las URL son URI”. Depende de la interpretación del RFC. Por ejemplo, en Java, el analizador URI no le gusta [ o ] y eso se debe a que la especificación dice “no debería” y no “no debe”.

Así que eso enturbia las aguas aún más, desafortunadamente.

Si aún no ha leído la respuesta de Roger Pate , le aconsejo que lo haga también.

La identificación de URI y localización de URL ; sin embargo, los localizadores también son identificadores , por lo que cada URL también es un URI, pero hay URI que no son URL.

Ejemplos

  • Roger Pate

Este es mi nombre, que es un identificador. Es como un URI, pero no puede ser una URL, ya que no dice nada sobre mi ubicación ni cómo contactarme. En este caso, también identifica a al menos otras 5 personas en los Estados Unidos.

  • 4914 West Bay Street, Nassau, Bahamas

Este es un localizador, que es un identificador para esa ubicación física. Es como una URL y un URI (dado que todas las URL son URI), y también me identifica indirectamente como “residente de …”. En este caso, me identifica de manera única, pero eso cambiaría si tuviera un compañero de cuarto.

Digo “me gusta” porque estos ejemplos no siguen la syntax requerida.

Confusión popular

De la Wikipedia :

En informática, un localizador uniforme de recursos (URL) es un subconjunto del identificador uniforme de recursos (URI) que especifica dónde está disponible un recurso identificado y el mecanismo para recuperarlo. En el uso popular y en muchos documentos técnicos y discusiones verbales a menudo se usa incorrectamente como sinónimo de URI , … [énfasis mío]

Debido a esta confusión común, muchos productos y documentación utilizan incorrectamente un término en lugar del otro, asignan su propia distinción o los utilizan de manera sinónima.

URNs

Mi nombre, Roger Pate, podría ser como un URN (nombre uniforme del recurso), excepto que están mucho más regulados y destinados a ser únicos en el espacio y el tiempo.

Debido a que actualmente comparto este nombre con otras personas, no es globalmente único y no sería apropiado como URN. Sin embargo, incluso si ninguna otra familia usaba este nombre, recibo el nombre de mi abuelo paterno, por lo que aún no sería único a lo largo del tiempo. E incluso si ese no fuera el caso, la posibilidad de nombrar a mis descendientes después de mí lo hace inadecuado como URN.

Los URN son diferentes de las URL en esta restricción rígida de exclusividad, aunque ambos comparten la syntax de los URI.

URI – identificador uniforme de recursos

Los URI son un estándar para identificar documentos usando una cadena corta de números, letras y símbolos. Están definidos por RFC 3986 – Identificador Uniforme de Recursos (URI): Sintaxis Genérica . Las URL, URN y URC son todos los tipos de URI.

URL – Localizador uniforme de recursos

Contiene información sobre cómo recuperar un recurso desde su ubicación. Por ejemplo:

  • 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 (Una URL relativa, solo útil en el contexto de otra URL)

Las URL siempre comienzan con un protocolo ( http ) y generalmente contienen información como el nombre de host de la red ( example.com ) y, a menudo, una ruta del documento ( /foo/mypage.html ). Las URL pueden tener parámetros de consulta e identificadores de fragmentos.

URN: nombre uniforme del recurso

Identifica un recurso con un nombre único y persistente, pero no necesariamente le dice cómo localizarlo en Internet. Por lo general, comienza con la urn: prefijo urn: por ejemplo:

  • https://stackoverflow.com/questions/176264/what-is-the-difference-between-a-uri-a-url-and-a-urn/urn:isbn:0451450523 para identificar un libro por su número de ISBN.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 un identificador global único
  • urn:publishing:book : espacio de nombres XML que identifica el documento como un tipo de libro.

Los URN pueden identificar ideas y conceptos. No están restringidos a la identificación de documentos. Cuando una URN representa un documento, se puede traducir a una URL mediante un “resolver”. El documento se puede descargar de la URL.

URC – Citación uniforme de recursos

Señala metadatos sobre un documento en lugar de hacerlo sobre el documento en sí. Un ejemplo de un URC es uno que apunta al código fuente HTML de una página como: view-source:http://example.com/

URI de datos

En lugar de ubicarlo en Internet o nombrarlo, los datos se pueden colocar directamente en un URI. Un ejemplo serían los data:,Hello%20World .


Preguntas frecuentes

He oído que ya no debería decir URL, ¿por qué?

La especificación W3 para HTML dice que el href de una etiqueta ancla puede contener un URI, no solo una URL. Debería poder un URN como . Su navegador luego resolvería esa URN a una URL y descargará el libro por usted.

¿Alguno navegador realmente sabe cómo buscar documentos por URN?

No es que yo sepa, pero un navegador web moderno sí implementa el esquema de URI de datos.

¿La diferencia entre URL y URI tiene algo que ver con si es relativa o absoluta?

No. Ambas URL relativas y absolutas son URL (y URI).

¿La diferencia entre URL y URI tiene algo que ver con si tiene parámetros de consulta?

No. Ambas URL con y sin parámetros de consulta son URL (y URI).

¿La diferencia entre URL y URI tiene algo que ver con si tiene un identificador de fragmento?

No. Ambas URL con y sin identificadores de fragmentos son URL (y URI).

¿La diferencia entre URL y URI tiene algo que ver con qué caracteres están permitidos?

No. Las URL se definen como un subconjunto estricto de URI. Si un analizador permite a un personaje en una URL pero no en una URI, hay un error en el analizador. Las especificaciones entran en gran detalle sobre qué caracteres están permitidos en qué partes de URL y URI. Es posible que algunos caracteres solo se permitan en algunas partes de la URL, pero los caracteres por sí solos no son una diferencia entre las URL y los URI.

Pero, ¿no dice el W3C ahora que las URL y los URI son lo mismo?

Sí. El W3C se dio cuenta de que hay un montón de confusión sobre esto. Emitieron un documento de aclaración URI que dice que ahora está bien utilizar los términos URL y URI indistintamente (para significar URI). Ya no es útil segmentar estrictamente los URI en diferentes tipos, como URL, URN y URC.

¿Puede un URI ser una URL y una URN?

La definición de URN ahora es más flexible que lo que dije anteriormente. La última RFC sobre URI dice que cualquier URI ahora puede ser una URN (independientemente de si comienza con urn: siempre que tenga “las propiedades de un nombre”. Es decir: es globalmente único y persistente incluso cuando el recurso deja de existir o deja de estar disponible. Un ejemplo: los URI utilizados en HTML doctypes como http://www.w3.org/TR/html4/strict.dtd . Ese URI continuaría nombrando el doctype de transición HTML4 incluso si la página en el sitio web w3.org fue eliminada.


Diagrama de Venn de URI / URL

En resumen: identifica un URI, una URL identifica y localiza.

Considere una edición específica de la obra de Shakespeare Romeo y Julieta , de la que tiene una copia digital en su red doméstica.

Puede identificar el texto como urn:isbn:0-486-27557-4 .
Eso sería un URI, pero más específicamente un URN * porque nombra el texto .

También podría identificar el texto como file://hostname/sharename/RomeoAndJuliet.pdf .
Eso también sería un URI, pero más específicamente una URL porque ubica el texto .

* Nombre uniforme del recurso

(Tenga en cuenta que mi ejemplo está adaptado de Wikipedia )

Estas son algunas respuestas muy bien escritas pero prolijas. Aquí está la diferencia en lo que respecta a CodeIgniter :

URLhttp://example.com/some/page.html

URI – /some/page.html

En pocas palabras, la URL es la forma completa de identificar cualquier recurso en cualquier lugar y puede tener diferentes protocolos como FTP, HTTP, SCP, etc.

URI es un recurso en el dominio actual, por lo que necesita menos información para ser encontrado.

En cada instancia que CodeIgniter utiliza la palabra URL o URI esta es la diferencia de la que están hablando, aunque en el gran esquema de la web, no es 100% correcto.

Una pequeña adición a las respuestas ya publicadas, aquí hay un diagtwig de Venn para resumir la teoría (de la bella explicación de Prateek Joshi):

enter image description here

Y un ejemplo (también del sitio web de Prateek):

enter image description here

Este es uno de los temas más confusos y posiblemente irrelevantes que he encontrado como profesional de la web.

Según lo entiendo, un URI es una descripción de algo, siguiendo un formato aceptado, que puede definir ambos o el nombre único (identificación) de algo y su ubicación.

Hay dos subconjuntos básicos: las URL, que definen la ubicación (especialmente para un navegador que intenta buscar una página web) y los URN, que definen el nombre único de algo.

Tiendo a pensar que los URN son similares a los GUID. Son simplemente una metodología estandarizada para proporcionar nombres únicos para las cosas. Al igual que en el declarativo del espacio de nombres que utiliza el nombre de una empresa, no es que haya un recurso en un servidor en algún lugar que se corresponda con esa línea de texto, simplemente identifica de forma única algo.

También tiendo a evitar completamente el término URI y discutir las cosas solo en términos de URL o URN según corresponda, porque causa tanta confusión. La pregunta que realmente deberíamos intentar responder a las personas no es tanto la semántica, sino cómo identificar al encontrar los términos si existe o no una diferencia práctica que cambie el enfoque de una situación de progtwigción. Por ejemplo, si alguien me corrige en una conversación y dice: “oh, eso no es una URL, es una URI”, sé que están llenos de eso. Si alguien dice “estamos usando una URN para definir el recurso”, es más probable que entienda que solo lo estamos nombrando de manera única, no ubicándolo en un servidor.

Si estoy fuera de la base, ¡por favor hágamelo saber!

Antes que nada, saca tu mente de la confusión y tómala de manera simple y entenderás.

URI => Identificador uniforme de recursos Identifica una dirección completa del recurso, es decir, ubicación, nombre o ambos.

URL => Localizador uniforme de recursos Identifica la ubicación del recurso.

URN => Nombre de recurso uniforme Identifica el nombre del recurso

Ejemplo

Tenemos la dirección https://www.google.com/folder/page.html donde,

URI (identificador uniforme de recursos) => https://www.google.com/folder/page.html

URL (Localizador uniforme de recursos) => https://www.google.com/

URN (Nombre de recurso uniforme) => /folder/page.html

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

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

Las URL son un subconjunto de URI (que también contienen URN).

Básicamente, un URI es un identificador general, donde una URL especifica una ubicación y una URN especifica un nombre.

Otro ejemplo que me gusta usar cuando pienso en URI es el atributo xmlns de un documento XML:

  some text  

En este caso, com.mycompany.mynode sería un URI que identifica de manera única el espacio de nombres “myPrefix” para todos los elementos que lo usan dentro de mi documento XML. Esta NO es una URL porque solo se usa para identificar, no para localizar algo per se.

Identificador = Nombre + Ubicación

Cada URL ( L oca nador de Recursos U niformes) es un URI ( U niforme R fuente I dentifier), en términos abstractos, pero cada URI no es una URL. Hay otra subcategoría de URI que es URN (Nominal de Recursos Uniforme), que es un recurso con nombre pero no especifica cómo localizarlos, como mailto, news, ISBN es URIs.

enter image description here

Sintaxis para URN: [scheme:]scheme-specific-part[#fragment]

Ejemplos:
mailto: java-net@java.sun.com
noticia: comp.lang.java
urna: isbn: 096139210x

Sintaxis para URL: [scheme:][//authority][path][?query][#fragment]

Ejemplos:
http://java.sun.com/j2se/1.3/docs / guide / collections / designfaq.html # 28
../../../demo/jfc/SwingSet2/src/SwingSet2.java
file: //host/dir/myfile.txt

fuente

Analogía:
Para llegar a una persona: Conducir (protocolo de otros SMS, correo electrónico, teléfono), Dirección (nombre de host, otro número de teléfono, ID de correo electrónico) y nombre de la persona (nombre del objeto con una ruta relativa).

Debido a las dificultades para distinguir claramente entre URI y URL, por lo que recuerdo, W3C ya no hace la diferencia entre URI y URL ( http://www.w3.org/Addressing/ ).

Son lo mismo . Un URI es una generalización de una URL. Originalmente, se planeó que los URI se dividieran en URL (direcciones) y URN (nombres), pero luego había poca diferencia entre una URL y URI y los URI HTTP se usaban como espacios de nombres, aunque en realidad no ubicaban ningún recurso.

URI y URL

URI, URL, URN

Como lo indica la imagen de arriba, aquí hay tres componentes distintos en juego. Por lo general, es mejor ir a la fuente cuando se discuten asuntos como estos, así que aquí está un extracto de Tim Berners-Lee, et. Alabama. en RFC 3986: Identificador Uniforme de Recursos (URI): Sintaxis Genérica:

Un identificador uniforme de recursos (URI) es una secuencia compacta de caracteres que identifica un recurso abstracto o físico.

Un URI se puede clasificar además como un localizador, un nombre o ambos. El término “Localizador uniforme de recursos” (URL) se refiere al subconjunto de URI que, además de identificar un recurso, proporciona un medio para ubicar el recurso describiendo su mecanismo de acceso primario (por ejemplo, su “ubicación” de red).

URI es una especie de súper clase de URL y URN. Wikipedia tiene un buen artículo sobre ellos con enlaces al conjunto correcto de RFC.

URL

Una URL es una especialización de URI que define la ubicación de red de un recurso específico. A diferencia de una URN, la URL define cómo se puede obtener el recurso. Usamos las URL todos los días en la forma de http://example.com etc. Pero una URL no tiene que ser una URL HTTP, también puede ser ftp://example.com , etc.

URI

Un URI identifica un recurso ya sea por ubicación, o un nombre, o ambos. En la mayoría de los casos, la mayoría de nosotros usamos URI que define una ubicación para un recurso. El hecho de que un URI pueda identificar recursos tanto por nombre como por ubicación ha llevado a mucha confusión, en mi opinión. Un URI tiene dos especializaciones conocidas como URL y URN.

Diferencia entre URL y URI

Un URI es un identificador de algún recurso, pero una URL le proporciona información específica para obtener ese recurso. Un URI es una URL y, como señaló un comentador, ahora se considera incorrecto utilizar la URL al describir las aplicaciones. Generalmente, si la URL describe tanto la ubicación como el nombre de un recurso, el término que se debe usar es URI. Dado que este es generalmente el caso que la mayoría de nosotros encontramos todos los días, URI es el término correcto.

Wikipedia dará toda la información que necesita aquí. Citando de http://en.wikipedia.org/wiki/URI :

Una URL es una URI que, además de identificar un recurso, proporciona medios para actuar u obtener una representación del recurso describiendo su mecanismo de acceso primario o “ubicación” de red.

Según RFC 3986 , los URI se componen de las siguientes piezas:

 scheme://authority/path?query 

El URI describe el protocolo para acceder a un recurso ( ruta ) o aplicación ( consulta ) en un servidor ( autoridad ).

Ingrese la descripción de la imagen aquí

Todas las URL son URI, y todas las URN son URI, pero todas las URI no son URL.

Por favor refiérase para más detalles:

Wikipedia

Un URI identifica un recurso ya sea por ubicación, o un nombre, o ambos. En la mayoría de los casos, la mayoría de nosotros usamos URI que define una ubicación para un recurso. El hecho de que un URI pueda identificar recursos tanto por nombre como por ubicación ha llevado a mucha confusión, en mi opinión. Un URI tiene dos especializaciones conocidas como URL y URN.

Una URL es una especialización de URI que define la ubicación de red de un recurso específico. A diferencia de una URN, la URL define cómo se puede obtener el recurso. Usamos URL todos los días en forma de http://stackoverflow.com , etc. Pero una URL no tiene que ser una URL HTTP, puede ser ftp://example.com , etc.

Aunque los términos URI y URL están estrictamente definidos, muchos usan los términos para otras cosas que no están definidos.

Tomemos Apache por ejemplo. Si se solicita http://example.com/foo desde un servidor Apache, tendrá las siguientes variables de entorno establecidas:

  • REDIRECT_URL : /foo
  • REQUEST_URI : /foo

Con mod_rewrite habilitado, también tendrá estas variables:

  • REDIRECT_SCRIPT_URL : /foo
  • REDIRECT_SCRIPT_URI : http://example.com/foo
  • SCRIPT_URL : /foo
  • SCRIPT_URI : http://example.com/foo

Esta podría ser la razón de algo de la confusión.

Ver este documento . Específicamente,

una URL es un tipo de URI que identifica un recurso a través de una representación de su mecanismo de acceso primario (por ejemplo, su “ubicación” de red), en lugar de otros atributos que pueda tener.

No es un término extremadamente claro, realmente.

Después de leer las publicaciones, encuentro algunos comentarios muy relevantes. En resumen, la confusión entre las definiciones de URL y URI se basa en parte en la definición que depende del uso informal de la palabra URI en el desarrollo de software.

Por definición, URL es un subconjunto de URI [RFC2396]. URI contiene URN y URL. Tanto URI como URL tienen su propia syntax específica que les confiere el estado de URI o URL. URN son para identificar un recurso de manera única, mientras que las URL son para localizar un recurso. Tenga en cuenta que un recurso puede tener más de una URL pero solo una URN. [RFC2611]

Como desarrolladores y progtwigdores web, casi siempre nos interesará la URL y, por lo tanto, el URI. Ahora una URL está específicamente definida para tener todo el esquema de partes: parte específica de esquema, como por ejemplo https://stackoverflow.com/questions . Esta es una URL y también es un URI. Ahora considere un enlace relativo incrustado en la página, como ../index.html. Esto ya no es una URL por definición. Todavía es lo que se conoce como una “referencia URI” [RFC2396].

Creo que cuando la palabra URI se usa para referirse a rutas relativas, “URI-reference” es en realidad lo que se piensa. De manera informal, los sistemas de software usan URI para referirse a rutas relativas y URL para la dirección absoluta. Entonces, en este sentido, una ruta relativa ya no es una URL sino un URI.

Aquí está mi simplificación:

URN: nombre de recurso único, es decir, “qué” (por ejemplo, urn: issn: 1234-5678). Esto es para ser único … ya que en ningún dos documentos diferentes puede tener la misma urna. Un poco como “uuid”

URL: “dónde” para encontrarlo (ej. https://google.com/pub?issnid=1234-5678 .. o ftp://somesite.com/doc8.pdf )

URI: puede ser una URN o una URL. Esta definición difusa es gracias a RFC 3986 producida por W3C e IETF.

La definición de URI ha cambiado a lo largo de los años, por lo que tiene sentido que la mayoría de la gente esté confundida. Sin embargo, ahora puede consolarse con el hecho de que puede referirse a http://somesite.com/ algo como una URL o URI … y estará en lo cierto de cualquier manera (al menos por el momento, de todos modos … .)

Me preguntaba sobre lo mismo y encontré esto: http://docs.kohanaphp.com/helpers/url .

Puede ver un ejemplo claro usando el método url::current() . If you have this URL : http://example.com/kohana/index.php/welcome/home.html?query=string then using url:current() gives you the URI which, according to the documentation, is: welcome/home

URIs came about from the need to identify resources on the Web, and other Internet resources such as electronic mailboxes in a uniform and coherent way. So, one can introduce a new type of widget: URIs to identify widget resources or use tel: URIs to have web links cause telephone calls to be made when invoked.

Some URIs provide information to locate a resource (such as a DNS host name and a path on that machine), while some are used as pure resource names. The URL is reserved for identifiers that are resource locators , including ‘http’ URLs such as http://stackoverflow.com , which identifies the web page at the given path on the host. Another example is ‘mailto’ URLs, such as mailto:fred@mail.org , which identifies the mailbox at the given address.

URNs are URIs that are used as pure resource names rather than locators. For example, the URI: mid:0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com is a URN that identifies the email message containing it in its ‘Message-Id’ field. The URI serves to distinguish that message from any other email message. But it does not itself provide the message’s address in any store.

Easy to explain:

Lets assume the following

URI is your Name

URL is your address with your name in-order to communicate with you.

  • my name is Loyola

    Loyola is URI

  • my address is TN, Chennai 600001.

TN, Chennai 600 001, Loyola is URL

Hope you understand,

Now lets see a precise example

http://www.google.com/fistpage.html

in the above you can communicate with a page called firstpage.html ( URI ) using following http://www.google.com/fistpage.html ( URL ).

Hence URI is subset of URL but not vice-versa.

In order to answer this I’ll lean on an answer I modified to another question . A good example of a URI is how you identify an Amazon S3 resource. Let’s take:

s3://www-example-com/index.html [fig. 1]

which I created as a cached copy of

http://www.example.com/index.html [fig. 2]

in Amazon’s S3-US-West-2 datacenter.

Even if StackOverflow would allow me to hyperlink to the s3:// protocol scheme, it wouldn’t do you any good in locating the resource. Because it Identifies a Resource , fig. 1 is a valid URI. It is also a valid URN, because Amazon requires that the bucket (their term for the authority portion of the URI) be unique across datacenters. It is helpful in locating it, but it does not indicate the datacenter. Therefore it does not work as a URL.

So, how do URI, URL, and URN differ in this case?

NOTE: RFC 3986 defines URIs as scheme://authority/path?query#fragment

A Uniform Resource Identifier (URI) is a string of characters which identifies an Internet Resource.

The most common URI is the Uniform Resource Locator (URL) which identifies an Internet domain address. Another, not so common type of URI is the Universal Resource Name (URN).

Encontré:


A uniform resource identifier(URI) represents something of a big picture. You can split URIs/ URIs can be classified as locators (uniform resource locators- URL), or as names (uniform resource name-URN), or either both. So basically, a URN functions like a person’s name and the URL depicts that person’s address. So long story short, a URN defines an item’s identity, while the URL provides defines the method for finding it, finally encapsulating these two concepts is the URI

La respuesta es ambigua In Java it is frequently used in this way:

An Uniform Resource Locator (URL) is the term used to identify an Internet resource including the scheme( http, https, ftp, news, etc.). For instance What is the difference between a URI, a URL and a URN?

An Uniform Resource Identifier (URI) is used to identify a single document in the Web Server: For instance /questions/176264/whats-the-difference-between-a-uri-and-a-url

In Java servlets, the URI frequently refers to the document without the web application context.