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

4366

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?

Sean McMains
fuente
158
La URL es más específica que la URI.
mk12
30
Para los webmasters asumir esta pregunta: ¿Cuál es la diferencia entre URI y URL?
hippietrail
162
Diagrama de Mini Venn:( URIs ( URLs ) )
icc97
30
Todavía parece haber mucha confusión sobre URI vs URL, incluso por aquellos que intentaron responder la pregunta. Sería beneficioso para todos ver ejemplos prácticos de URL que no son URI, ejemplos de URI que no son URL y ejemplos que son URL y URI.
Dennis
30
Kathy: "¿Ese es tu perro?" Bob: "Sería más correcto llamarlo canino". Kathy: "No, él es un perro. Usted, señor, es pedante".
Yojimbo

Respuestas:

1747

Desde RFC 3986 :

Un URI puede clasificarse 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 localizar 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 de "urna" [RFC2141] , que deben permanecer únicos y persistentes a nivel mundial 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, ver más abajo), y todas las URN son URI, pero las URN y las URL son diferentes, por lo que no se puede decir que todas las URI son URL.

EDITAR: previamente pensé que todas las URL son URI válidas, pero según los comentarios:

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

De modo que eso enturbia aún más las aguas, desafortunadamente.

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

Jon Skeet
fuente
15
Solo los URI con la urna: esquema son URN. Un URI podría ser una URL clásica, una URN o simplemente un URI que no comienza con "urna:" y no se refiere a la ubicación de un recurso.
Mark Cidade
18
No " todas las URL son URI ". Depende de la interpretación de la RFC. Por ejemplo, en Java, al analizador de URI no le gusta [o, ]y eso se debe a que la especificación dice "no debería" y no "no".
Adam Gent
55
@AdamGent: RFC 3986 1.1.3: "Un URI puede clasificarse además como un localizador, un nombre o ambos". Entonces, si la URL es un tipo especial de URI, eso significa que cada URL es un URI. ¿No es así?
Hubert
14
@AdamGent: Eso suena como un capricho de implementación de Java, y no normativo. El java.net.URIdocumento en sí dice "cada URL es un URI, en términos abstractos, pero no todos los URI son una URL". Y java.net.URLhace cosas extrañas como verificar la igualdad de las URL resolviendo nombres de host en direcciones IP (lo que parece estar en desacuerdo con RFC 3986 sec 6 en primer lugar, y rompe w hosts virtuales). Creo que esto solo significa que la Biblioteca estándar de Java tiene un comportamiento de clase inconsistente.
Andrew Janke
3
@JonSkeet ¿Quizás solo necesite diferenciar entre estándares versus implementaciones? Por ejemplo, "formalmente, de acuerdo con los RFC, todas las URL son URI. (Extracto de RFC). Pero las implementaciones existentes pueden no coincidir exactamente con las especificaciones, posiblemente por interoperabilidad, y pueden usar URL que no son válidas por los RFC. Y porque es un área complicada , algunas personas y documentos pueden usar 'URL' para significar algo diferente de lo especificado por RFC ". Algo así como la mayoría de las rutinas de validación de correo electrónico no coinciden con las definiciones de RFC.
Andrew Janke
3842

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 le dice nada sobre mi ubicación o cómo contactarme. En este caso, también se identifican al menos otras 5 personas solo en los EE. UU.

  • 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 (ya 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 consigo un compañero de cuarto.

Digo "me gusta" porque estos ejemplos no siguen la sintaxis requerida.

Confusión popular

De 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 usan incorrectamente un término en lugar del otro, asignan su propia distinción o los usan como sinónimos.

URN

Mi nombre, Roger Pate, podría ser como un URN (Nombre Uniforme de Recursos), excepto que están mucho más regulados y tienen la intención de ser únicos tanto en el espacio como en 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 usó este nombre, me nombraron en honor a mi abuelo paterno, por lo que aún no sería único en el tiempo. E incluso si ese no fuera el caso, la posibilidad de nombrar a mis descendientes después de mí hace que esto sea inadecuado como URN.

Los URN son diferentes de los URL en esta restricción de unicidad rígida, a pesar de que ambos comparten la sintaxis de los URI.

Comunidad
fuente
3
URNs are different from URLs in this rigid uniqueness constraint¿Significa esto que las URL no identifican de forma exclusiva una ubicación?
eugene
30
La respuesta de Roger proporciona buenos consejos pragmáticos. Para la respuesta oficial, voy al W3C que publicó " URI, URL y URN: aclaraciones y recomendaciones " en 2001. En pocas palabras, W3C dice que la visión contemporánea es que todo es un URI. La URL es un concepto informal, no un concepto formal. Y la confusión se remonta a una "visión clásica" que trató de distinguir rígidamente entre categorías de URI (de las cuales la URL era una categoría).
netjeff
55
..a Localizador uniforme de recursos (URL) .. especifica dónde está disponible un recurso identificado y el mecanismo para recuperarlo . En otras palabras, ¿no existe una URL "relativa"?
Arne
99
¿Es "earth128: Edward-de-Leau / 6000000000569063853" (el yo único en un multiverso múltiple) una URN, una URL o un URI?
edelwater
66
@edelwater: Supongo que es una uri, ya que solo te identifica pero no dice nada sobre cómo llegar a ti, a menos que quieras decir que earth128 es un medio de viaje interplanetario :)
user20358
671

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:[email protected]
  • 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 de documento ( /foo/mypage.html). Las URL pueden tener parámetros de consulta e identificadores de fragmentos.

URN - Nombre de recurso uniforme

Identifica un recurso por un nombre único y persistente, pero no necesariamente le dice cómo ubicarlo en Internet. Suele comenzar con el prefijourn: Por ejemplo:

  • urn:isbn:0451450523 para identificar un libro por su número ISBN.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 un identificador único global
  • urn:publishing:book - Un 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 documentos de identificación. Cuando una URN representa un documento, un "resolutor" puede traducirlo a una URL. El documento se puede descargar desde la URL.

URC - Citación uniforme de recursos

Apunta a metadatos sobre un documento en lugar de al 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 podría ser 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 la hrefetiqueta de un ancla puede contener un URI, no solo una URL. Debería poder poner una URN como <a href="urn:isbn:0451450523">. Su navegador resolverá esa URN en una URL y descargará el libro por usted.

¿Hay algún navegador que sepa cómo buscar documentos por URN?

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

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

No. Tanto las URL relativas como las 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 un carácter en una URL pero no en un 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. Algunos caracteres solo se pueden permitir 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 que las URL y los URI son lo mismo?

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

¿Puede un URI ser tanto una URL como una URN?

La definición de URN ahora es más flexible que la que dije anteriormente. El último 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 documentos HTML como http://www.w3.org/TR/html4/strict.dtd. Ese URI continuaría nombrando el doctype de transición HTML4 incluso si se eliminara la página del sitio web w3.org.


Diagrama de Venn URI / URL

Stephen Ostermiller
fuente
8
¿Es "C: \ myfile" un URI, URL o URN? o ninguno de ellos.
bvdb
12
Una ruta de archivo no es una URL o URI a menos que le ponga el file://prefijo. Aunque los navegadores generalmente manejan rutas de archivos sin formato URL. Mozilla publica sus casos de prueba para URL de archivos .
Stephen Ostermiller
2
Consulte la sección 1.1 del RFC : "La uniformidad proporciona varios beneficios. Permite que se usen diferentes tipos de identificadores de recursos en el mismo contexto, incluso cuando los mecanismos utilizados para acceder a esos recursos pueden diferir. Permite una interpretación semántica uniforme de convenciones sintácticas comunes". a través de diferentes tipos de identificadores de recursos ... "
Stephen Ostermiller
Lo ha mencionado mailto:[email protected]como una URL, pero otra respuesta a continuación dice que es una URN. ¿Lo cual está bien? ¿Es a la vez URN y URL?
usuario31782
55
Esta respuesta es mucho más fácil de entender. Puedo ver claramente las imágenes de ejemplos reales de las URL y URN. Y para que cualquiera lea más sobre esto ... danielmiessler.com/study/url-uri
vee
253

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

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

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

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

* Nombre de recurso uniforme

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

Greg
fuente
66
Es útil tener en cuenta la URN real (para ver cómo se compara con una URL): urna: isbn: 0-486-27557-4
Michael Brewer-Davis
2
@ Michael - Tengo entendido que ISBN 0486275574también nombra el texto y, por lo tanto, califica como URN. Elijo un formato que creía que sería más familiar para los lectores.
Greg
2
Entonces, ¿tendría sentido decir que el hash (por ejemplo, SHA1) de un archivo podría ser una URN para ese archivo?
johnsimer
@johnsimer No lo creo, ya que podría tener una copia de un archivo en la misma computadora, lo que daría como resultado el mismo hash y, por lo tanto, no es único.
Dennis98
141

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

URL : http://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 encontrar menos información.

En cada caso en que CodeIgniter usa 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.

Phil Sturgeon
fuente
10
Esta respuesta puede estar simplificada en exceso, pero mire el contexto de su pregunta. ¡Será más útil para él que se preocupe por los espacios de nombres XML!
Phil Sturgeon
140
Esta respuesta no solo es incorrecta sino que también es engañosa. Ambos ejemplos son URL. Y dado que cada URL también es un URI, esto significa que ambos ejemplos son URI. Con el fin de demostrar la diferencia entre URI y URL, esto es totalmente inútil.
Jörg W Mittag
12
Esta es la diferencia en lo que respecta a CodeIgniter. En cada caso usan la palabra URL o URI, esta es la diferencia de la que están hablando. Por lo tanto, en el gran esquema de la web, no es 100% correcto, pero en el alcance de la pregunta del OP (la diferencia en CodeIgniter), esta respuesta es perfectamente correcta.
Phil Sturgeon el
12
Esto está mal. @ JörgWMittag está principalmente en su punto. Las URL son URI y están "totalmente calificadas"; entonces la "URL" en esta respuesta es ambas. Pero /some/page.htmlno es un URI. Es una "referencia relativa", que es una especie de "referencia URI". Combinado con un contexto de URI base, puede resolverse en un URI, pero no es en sí mismo un URI. Consulte la Sección 4.1 de RFC 3986 . CodeIgniter probablemente esté usando los términos incorrectos y eso debería llamarse; la Q (como se edita actualmente) no está enmarcada como específica de CodeIgniter.
Andrew Janke
37
Para las personas futuras que leen estos comentarios y están tan confundidos como yo: esta respuesta no se publicó para esta pregunta. Esta pregunta nunca tuvo nada que ver con CodeIgniter. Hubo una pregunta duplicada que mencionaba específicamente a CodeIgniter que estaba cerrada y todas sus respuestas migraron a esta pregunta. Esta respuesta fue una de las que se movieron de la vieja pregunta cerrada a esta pregunta protegida. Aun así, esta respuesta es engañosa. Lo he votado negativamente; otros deberían hacer lo mismo ya que, en su nuevo hogar, está mal. El autor debe eliminarlo o deshacer la fusión.
ArtOfWarfare
92

En primer lugar, saque su mente de la confusión y tómelo con calma y lo comprenderá.

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 uniforme del recurso 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

Eugen Konkov
fuente
66

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

Gustavo Mori
fuente
20
Creo que la segunda ilustración es incorrecta. Según la especificación url.spec.whatwg.org/#url-writing Una URL debe escribirse como una URL relativa o una URL absoluta, opcionalmente seguida de "#" y un fragmento. Por lo tanto, el #postsidentificador de fragmento podría ser parte de la URL
ruvim
77
Las dos ilustraciones se contradicen entre sí.
patapouf_ai
53

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

Según tengo entendido, 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: URL, que definen la ubicación (especialmente para un navegador que intenta buscar una página web) y 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 de espacio de nombres que usa el nombre de una empresa, no es como si hubiera un recurso en un servidor en algún lugar para corresponder a esa línea de texto, simplemente identifica algo de manera única.

También tiendo a evitar por completo el término URI y discutir cosas solo en términos de URL o URN, según corresponda, porque causa mucha confusión. La pregunta que realmente deberíamos tratar de responder para las personas no es tanto la semántica, sino cómo identificar al encontrar los términos si existe alguna diferencia práctica en ellos que cambie el enfoque de una situación de programación. Por ejemplo, si alguien me corrige en una conversación y dice: "oh, esa no es una URL, es un URI" Sé que están llenos de eso. Si alguien dice "estamos usando una URN para definir el recurso", es más probable que comprenda que solo lo nombramos de manera única, no lo ubicamos en un servidor.

Si estoy fuera de la base, ¡házmelo saber!

Kevin Lowe
fuente
44
No, creo que tienes razón. La semántica de URI vs URL vs URL vs URI-ref etc. es inútil para la mayoría de los desarrolladores, solo porque genera un debate inútil (no productivo, insignificante para la toma de decisiones). Si se usara la API de Google en redirect_urllugar de redirect_uri, ¿a alguien le importaría realmente?
53

Identidad = Nombre con ubicación

Cada URL ( U niform R esource L ocator) es un URI ( U niform R esource I dentifier), en términos abstractos, pero cada URI no es una URL. Hay otra subcategoría de URI es URN ( U niform R esource N ame), que es un recurso con nombre pero no especifica cómo ubicarlos, como mailto, news, ISBN es URI. Fuente

ingrese la descripción de la imagen aquí

URNA:

  • Formato de URNA: urn:[namespace identifier]:[namespace specific string]
  • urna: y: representan a sí mismos.
  • Ejemplos :
    • urna: uuid: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • urna: ISSN: 0167-6423
    • urna: isbn: 096139210x
    • Amazon Resource Names (ARNs) es un recurso de AWS de identificación única.
      • Formato ARN: arn:partition:service:region:account-id:resource

URL:

  • Formato de URL: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • :, // ,? y # se defienden a sí mismos.
  • Los esquemas son https, ftp, gopher, mailto, news, telnet, file, man, info, whatis, ldap ...
  • Ejemplos:

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

Premraj
fuente
Pequeñas objeciones: debe haber dos puntos entre [dominio] y [puerto]. IE: example.com:1234
Rex Schrader
42

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.

Craig Wilson
fuente
1
Las URL no son un verdadero subconjunto de URI. Puede crear URL vacías con caracteres [y ]no un URI.
Adam Gent
44
Los corchetes no son válidos ni en URI ni en URL. Vea esta pregunta que tiene muchas referencias a las especificaciones: ¿Se permiten los corchetes en las URL? . Cuando aparecen corchetes en cualquiera de los dos, deben codificarse.
Stephen Ostermiller
35

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

<rootElement xmlns:myPrefix="com.mycompany.mynode">
    <myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

En este caso, com.mycompany.mynode sería un URI que identifica de forma exclusiva el espacio de nombres "myPrefix" para todos los elementos que lo utilizan en mi documento XML. Esta NO es una URL porque solo se usa para identificar, no para localizar algo per se.

corriente continua
fuente
28

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

manuel aldana
fuente
Tal vez me perdí esa parte, pero no veo ninguna referencia en el enlace proporcionado que elimine la distinción entre URL y URI, solo reconozco la confusión y deseo que las especificaciones que hacen referencia incorrectamente a la URL se actualicen para referenciar URI.
Tim Gautier el
27

Son lo mismo . Un URI es una generalización de una URL. Originalmente, se planificó que los URI se dividieran en URL (direcciones) y URN (nombres), pero luego hubo poca diferencia entre un URL y URI y los URI http se utilizaron como espacios de nombres, aunque en realidad no localizaron ningún recurso.

Mark Cidade
fuente
Pensé que era al revés. Una URL se refiere a un objeto concreto, y un URI puede referirse a eso o un concepto o cualquier otra cosa.
Chris Charabaruk
44
Una URL localiza un recurso y es un tipo de URI, que identifica un recurso.
Mark Cidade
Solo es cierto que son lo mismo porque la definición de URL ha cambiado con el tiempo. Las URL solían ser un tipo específico de URI, pero debido a la confusión que causó, el W3C redefinió la URL como URI.
Stephen Ostermiller
25

URI y URL

URI, URL, URN

Como indica la imagen de arriba, hay tres componentes distintos en juego aquí. Por lo general, es mejor ir a la fuente cuando se discuten asuntos como estos, así que aquí hay 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 puede clasificarse 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 localizar el recurso describiendo su mecanismo de acceso primario (por ejemplo, su "ubicación" de red).

Adiii
fuente
21

URI es una especie de superclase de URL y URN. Wikipedia tiene un excelente artículo sobre ellos con enlaces al conjunto correcto de RFC.

André
fuente
17

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

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

Peter Boughton
fuente
16

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 URL todos los días en forma de http://example.cometc. Pero una URL no tiene que ser una URL HTTP, puede ser ftp://example.cometc., también.

URI

Un URI identifica un recurso ya sea por ubicación, o un nombre, o ambos. La mayoría de las veces, la mayoría de nosotros usamos URI que definen una ubicación para un recurso. El hecho de que un URI pueda identificar recursos por nombre y 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 para algún recurso, pero una URL le brinda información específica para obtener ese recurso. Un URI es una URL y, como señaló un comentarista, ahora se considera incorrecto usar la URL al describir las aplicaciones. En general, si la URL describe la ubicación y el nombre de un recurso, el término a 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.

Sujit
fuente
15

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, consulte para más detalles:

Wikipedia

Prashanth Sams
fuente
3
Esto no me enseña nada que no esté cubierto por las otras respuestas que tienen al menos 6 años y que son mucho más completas y realmente tratan de explicar cómo distinguir los URI de las URL.
ccjmne
2
Es importante tener en cuenta que la imagen es un diagrama de Venn a pesar de que no se ve como una típica. He visto personas que intentan interpretarlo como "partes de la URL". Este diagrama no dice que los URI comienzan con una URL y terminan con una URN.
Stephen Ostermiller
14

Un URI identifica un recurso ya sea por ubicación, o un nombre, o ambos. La mayoría de las veces, la mayoría de nosotros usamos URI que definen una ubicación para un recurso. El hecho de que un URI pueda identificar recursos por nombre y 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.

Swapnil
fuente
11

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

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

  • 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.

Gumbo
fuente
10

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 por otros atributos que pueda tener.

No es un término extremadamente claro, de verdad.

avpx
fuente
10

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 qué definición depende de qué y también el 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 cada uno su propia sintaxis específica que les confiere el estado de ser URI o URL. Los URN son para identificar un recurso de forma exclusiva, mientras que los 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 web y programadores, casi siempre nos preocuparemos por la URL y, por lo tanto, por el URI. Ahora, una URL se define específicamente para tener todas las partes del esquema: parte específica del 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. Sigue siendo lo que se conoce como una "referencia URI" [RFC2396].

Creo que cuando la palabra URI se usa para referirse a rutas relativas, en realidad se está pensando en "referencia URI". 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.

paul r
fuente
10

Aquí está mi simplificación:

URN: nombre de recurso único, es decir, "qué" (por ejemplo, urna: issn: 1234-5678). Esto debe ser único ... ya que no hay dos documentos diferentes que puedan tener la misma urna. Un poco como "uuid"

URL: "dónde" encontrarlo (por ejemplo, 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 se debe al RFC 3986 producido por W3C e IETF.

La definición de URI ha cambiado con los años, por lo que tiene sentido que la mayoría de las personas se confundan. Sin embargo, ahora puede consolarse con el hecho de que puede referirse a http://somesite.com/something como una URL o URI ... y tendrá razón en ambos sentidos (al menos por el momento de todos modos ... .)

jjolla
fuente
9

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

Puedes ver un ejemplo claro usando el url::current()método. Si tiene esta URL : el http://example.com/kohana/index.php/welcome/home.html?query=stringuso url:current()le proporciona el URI que, según la documentación, es: bienvenido / inicio

dierre
fuente
1
Esta respuesta es incorrecta. Un URI no es una parte de la URL. Más bien las URL son un tipo de URI. Además, el enlace en esta respuesta está roto (y no puedo encontrar un reemplazo adecuado)
Stephen Ostermiller
8

Los URI surgieron de la necesidad de identificar recursos en la Web y otros recursos de Internet , como los buzones electrónicos, de manera uniforme y coherente. Por lo tanto, se puede introducir un nuevo tipo de widget: URI para identificar recursos de widget o usar tel: URI para que los enlaces web provoquen llamadas telefónicas cuando se invocan.

Algunos URI proporcionan información para localizar un recurso (como un nombre de host DNS y una ruta en esa máquina), mientras que otros se usan como nombres de recursos puros. La URL está reservada para identificadores que son localizadores de recursos , incluidas las URL 'http' como http://stackoverflow.com , que identifica la página web en la ruta dada en el host. Otro ejemplo son las URL 'mailto', como mailto: [email protected] , que identifica el buzón en la dirección indicada.

Los URN son URI que se usan como nombres de recursos puros en lugar de localizadores. Por ejemplo, el URI: mid: [email protected] es una URN que identifica el mensaje de correo electrónico que lo contiene en su campo 'Id. De mensaje'. El URI sirve para distinguir ese mensaje de cualquier otro mensaje de correo electrónico. Pero no proporciona la dirección del mensaje en ninguna tienda.

dpant
fuente
7

Para responder esto, me apoyaré en una respuesta que modifiqué para otra pregunta . Un buen ejemplo de un URI es cómo identifica un recurso de Amazon S3. Echemos:

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

que creé como una copia en caché de

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

en el centro de datos S3-US-West-2 de Amazon .

Incluso si StackOverflow me permitiera hacer un hipervínculo al esquema de s3:// protocolo , no le serviría de nada localizar el recurso. Debido a que identifica un recurso , la fig. 1 es un URI válido. También es una URN válida, porque Amazon requiere que el depósito (su término para la authorityparte del URI) sea único en todos los centros de datos. Es útil para localizarlo, pero no indica el centro de datos. Por lo tanto, no funciona como una URL.

Entonces, ¿cómo difieren URI, URL y URN en este caso?

NOTA: RFC 3986 define los URI comoscheme://authority/path?query#fragment

Bruno Bronosky
fuente
6

Fácil de explicar:

Asumamos lo siguiente

URI es tu nombre

URL es su dirección con su nombre para comunicarse con usted.

  • mi nombre es loyola

    Loyola es URI

  • Mi dirección es TN, Chennai 600001.

TN, Chennai 600 001, Loyola es URL

Espero que entiendas,

Ahora veamos un ejemplo preciso

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

en lo anterior, puede comunicarse con una página llamada firstpage.html ( URI ) utilizando la siguiente http://www.google.com/fistpage.html ( URL ).

Por lo tanto, URI es un subconjunto de URL pero no viceversa.

loyola
fuente
44
Esta respuesta es engañosa. Cita de Wikipedia "Un Nombre Uniforme de Recursos (URN) funciona como el nombre de una persona, mientras que un Localizador Uniforme de Recursos (URL) se parece a la dirección de esa persona. En otras palabras: la URN define la identidad de un elemento, mientras que la URL proporciona un método para encontrar eso." Además, tanto las URN como las URL son URI.
Vegan Sv
4

Un identificador uniforme de recursos (URI) es una cadena de caracteres que identifica un recurso de Internet.

El URI más común es el Localizador Uniforme de Recursos (URL) que identifica una dirección de dominio de Internet. Otro tipo de URI no tan común es el Nombre de recurso universal (URN).


fuente
4

Encontré:


Un identificador uniforme de recursos (URI) representa una especie de panorama general. Puede dividir los URI / URI pueden clasificarse como localizadores (localizadores de recursos uniformes - URL), o como nombres (nombre de recurso uniforme - URN), o ambos. Básicamente, una URN funciona como el nombre de una persona y la URL representa la dirección de esa persona. En resumen, una URN define la identidad de un elemento, mientras que la URL proporciona el método para encontrarlo, finalmente encapsulando estos dos conceptos es el URI

Rakeeb Rajbhandari
fuente
2

El mejor resumen (técnica) de la OMI es éste

IRI, URI, URL, URN y sus diferencias con Jan Martin Keil:

IRI, URI, URL, URN y sus diferencias

Todos los que se ocupan de la Web Semántica encuentran repetidamente los términos IRI , URI , URL y URN . Sin embargo, con frecuencia observo que existe cierta confusión sobre su significado exacto. Y, por supuesto, otros también lo notaron (ver, por ejemplo, RFC3305 o buscar en Google). Para ser honesto, incluso me confundí al principio. Pero en realidad el problema no es tan complejo. Echemos un vistazo a las definiciones de los términos mencionados para ver cuáles son las diferencias:

URI

Un identificador uniforme de recursos es una secuencia compacta de caracteres que identifica un recurso abstracto o físico. El conjunto de caracteres está limitado a US-ASCII, excluyendo algunos caracteres reservados. Los caracteres que se encuentran fuera del conjunto de caracteres permitidos se pueden representar mediante la codificación porcentual. Un URI puede usarse como un localizador, un nombre o ambos. Si un URI es un localizador, describe el mecanismo de acceso primario de un recurso. Si un URI es un nombre, identifica un recurso dándole un nombre único. Las especificaciones exactas de la sintaxis y la semántica de un URI dependen del esquema utilizado definido por los caracteres antes del primer colon. [RFC3986]

URNA

Un Nombre de recurso uniforme es un URI en la urna del esquema destinado a servir como identificador de recurso persistente, independiente de la ubicación. Históricamente, el término también se refería a cualquier URI. [RFC3986] Una URN consta de un Identificador de espacio de nombres (NID) y una Cadena específica de espacio de nombres (NSS): urn :: La sintaxis y la semántica del NSS es específica de cada NID. Además de los NID registrados, existen varios NID más que no pasaron por el proceso de registro oficial. [RFC2141]

URL

Un localizador uniforme de recursos es un URI que, además de identificar un recurso, proporciona un medio para localizar el recurso al describir su mecanismo de acceso primario [RFC3986]. Como no existe una definición exacta de URL mediante un conjunto de esquemas, "URL es un concepto útil pero informal", que generalmente se refiere a un subconjunto de URI que no contienen URN [RFC3305].

IRI

Un identificador de recursos internacionalizados se define de manera similar a un URI, pero el conjunto de caracteres se extiende al conjunto de caracteres codificado universal. Por lo tanto, puede contener caracteres latinos y no latinos, excepto los caracteres reservados. En lugar de extender la definición de URI, se introdujo el término IRI para permitir una distinción clara y evitar incompatibilidades. Los IRI están destinados a reemplazar los URI en la identificación de recursos en situaciones en las que se admite el Juego de caracteres codificado universal. Por definición, cada URI es un IRI. Además, existe un mapeo sobreyectivo definido de IRI a URI: cada IRI puede asignarse exactamente a un URI, pero diferentes IRI pueden asignarse al mismo URI. Por lo tanto, la conversión de un URI a un IRI puede no producir el IRI original. [RFC3987]

Resumiendo podemos decir:

IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)

Conclusiones para problemas de la web semántica

RDF permite explícitamente utilizar IRI para nombrar entidades [RFC3987]. Esto significa que podemos usar casi todos los caracteres en los nombres de las entidades. Por otro lado, a menudo tenemos que lidiar con software de estado temprano. Por lo tanto, no es improbable encontrarse con problemas al usar caracteres no ASCII. Por lo tanto, sugiero evitar nombres que no sean URI para entidades y recomiendo usar http URIs [LINKED-DATA]. Para decirlo brevemente: solo use URL para nombrar sus entidades. Por supuesto, podemos referirnos a entidades existentes nombradas por una URN. Sin embargo, debemos evitar crear nuevamente este tipo de identificadores.

Mischa
fuente