Identificador uniforme de recursos - Uniform Resource Identifier
Dominio | Red mundial |
---|---|
Abreviatura | URI |
Un identificador uniforme de recursos ( URI ) es una secuencia única de caracteres que identifica un recurso lógico o físico utilizado por las tecnologías web. Los URI se pueden usar para identificar cualquier cosa, incluidos objetos del mundo real, como personas y lugares, conceptos o recursos de información como páginas web y libros. Algunas URI proporcionan un medio para localizar y recuperar recursos de información en una red (ya sea en Internet o en otra red privada, como un sistema de archivos informático o una intranet); estos son localizadores uniformes de recursos (URL). Una URL proporciona la ubicación del recurso. Un URI identifica el recurso por su nombre en la ubicación o URL especificada. Otros URI proporcionan solo un nombre único, sin un medio para localizar o recuperar el recurso o información sobre él, estos son Nombres de recursos uniformes (URN). Las tecnologías web que utilizan URI no se limitan a los navegadores web. URI se utilizan para identificar nada se describe el uso de la descripción de recursos de estructura (RDF), por ejemplo, conceptos que son parte de una ontología definida utilizando el Lenguaje de Ontologías Web (OWL), y las personas que se describen con el amigo de un vocabulario amigo haría cada uno tener un URI individual.
Historia
Concepción
Los URI y las URL tienen un historial compartido. En 1990, las propuestas de Tim Berners-Lee para el hipertexto introdujeron implícitamente la idea de una URL como una cadena corta que representa un recurso que es el objetivo de un hipervínculo . En ese momento, la gente lo llamaba "nombre de hipertexto" o "nombre de documento".
Durante los siguientes tres años y medio, a medida que se desarrollaban las tecnologías centrales de HTML, HTTP y navegadores web de la World Wide Web, surgió la necesidad de distinguir una cadena que proporcionaba una dirección para un recurso de una cadena que simplemente nombraba un recurso. Aunque aún no se ha definido formalmente, el término Localizador Uniforme de Recursos llegó a representar al primero, y el Nombre Uniforme de Recursos, más polémico , llegó a representar al segundo. En julio de 1992, el informe de Berners-Lee sobre el IETF "UDI (Universal Document Identifiers) BOF " menciona URL (como localizadores uniformes de recursos), URN (originalmente, como números únicos de recursos) y la necesidad de constituir un nuevo grupo de trabajo. En noviembre de 1992, el "Grupo de trabajo URI" del IETF se reunió por primera vez.
Durante el debate sobre la definición de URL y URN, se hizo evidente que los conceptos incorporados por los dos términos eran simplemente aspectos de la noción fundamental y general de identificación de recursos . En junio de 1994, el IETF publicó la primera Solicitud de comentarios de Berners-Lee que reconocía la existencia de URL y URN. Lo más importante es que definió una sintaxis formal para los identificadores de recursos universales (es decir, cadenas similares a URL cuya sintaxis y semántica precisas dependían de sus esquemas). Además, el RFC 1630 intentó resumir las sintaxis de los esquemas de URL en uso en ese momento. Reconoció, pero no estandarizó , la existencia de URL relativas e identificadores de fragmentos.
Refinamiento
En diciembre de 1994, RFC 1738 definió formalmente las URL relativas y absolutas, perfeccionó la sintaxis general de las URL, definió cómo resolver las URL relativas en forma absoluta y enumeró mejor los esquemas de URL que se usaban en ese momento. La definición y sintaxis acordadas de URN tuvo que esperar hasta la publicación de IETF RFC 2141 en mayo de 1997.
La publicación de IETF RFC 2396 en agosto de 1998 vio la sintaxis de URI convertirse en una especificación separada y la mayoría de las partes de RFC 1630 y 1738 relacionadas con URI y URL en general fueron revisadas y expandidas por IETF . El nuevo RFC cambió el significado de "U" en "URI" a "Uniforme" de "Universal".
En diciembre de 1999, RFC 2732 proporcionó una actualización menor a RFC 2396, permitiendo que los URI se acomoden a direcciones IPv6 . Una serie de deficiencias descubiertas en las dos especificaciones llevaron a un esfuerzo comunitario, coordinado por el coautor de RFC 2396, Roy Fielding , que culminó con la publicación de IETF RFC 3986 en enero de 2005. Si bien dejó obsoleto el estándar anterior, no proporcionó los detalles. de los esquemas de URL existentes obsoletos; RFC 1738 continúa gobernando dichos esquemas excepto donde se reemplaza de otra manera. IETF RFC 2616, por ejemplo, refina el http
esquema. Simultáneamente, el IETF publicó el contenido de RFC 3986 como el estándar completo STD 66, reflejando el establecimiento de la sintaxis genérica URI como protocolo oficial de Internet.
En 2001, el Grupo de Arquitectura Técnica (TAG) del W3C publicó una guía de mejores prácticas y URI canónicos para publicar múltiples versiones de un recurso determinado. Por ejemplo, el contenido puede diferir según el idioma o el tamaño para ajustar la capacidad o la configuración del dispositivo utilizado para acceder a ese contenido.
En agosto de 2002, IETF RFC 3305 señaló que el término "URL", a pesar del uso público generalizado, se desvaneció casi en la obsolescencia, y sirve sólo como recordatorio de que algunas URI actúan como direcciones al tener esquemas que implican accesibilidad a la red, independientemente de tales Uso actual. Como hacen evidente los estándares basados en URI, como Resource Description Framework , la identificación de recursos no tiene por qué sugerir la recuperación de representaciones de recursos a través de Internet, ni tampoco es necesario que impliquen recursos basados en la red en absoluto.
La Web Semántica utiliza el esquema HTTP URI para identificar tanto documentos como conceptos en el mundo real, una distinción que ha causado confusión sobre cómo distinguir los dos. El TAG publicó un correo electrónico en 2005 sobre cómo resolver el problema, que se conoció como la resolución httpRange-14 . El W3C publicó posteriormente una Nota de grupo de interés titulada Cool URIs for the Semantic Web , que explicaba con más detalle el uso de la negociación de contenido y el código de respuesta HTTP 303 para redirecciones.
Diseño
URL y URN
Un nombre de recurso uniforme (URN) es un URI que identifica un recurso por su nombre en un espacio de nombres en particular. Una URN puede usarse para hablar sobre un recurso sin implicar su ubicación o cómo acceder a él. Por ejemplo, en el sistema International Standard Book Number (ISBN), ISBN 0-486-27557-4 identifica una edición específica de la obra de Shakespeare Romeo y Julieta . La URN para esa edición sería urn: isbn: 0-486-27557-4 . Sin embargo, no proporciona información sobre dónde encontrar una copia de ese libro.
Un localizador uniforme de recursos (URL) es un URI que especifica los medios para actuar sobre un recurso u obtener su representación, es decir, especificando tanto su mecanismo de acceso principal como la ubicación de la red. Por ejemplo, la URL se http://example.org/wiki/Main_Page
refiere a un recurso identificado como /wiki/Main_Page
, cuya representación, en forma de HTML y código relacionado, se puede obtener mediante el Protocolo de transferencia de hipertexto ( http:) desde un host de red cuyo nombre de dominio es example.org
.
Una URN se puede comparar con el nombre de una persona, mientras que una URL se puede comparar con su dirección postal. En otras palabras, una URN identifica un elemento y una URL proporciona un método para encontrarlo.
Las publicaciones técnicas, especialmente las normas producidas por el IETF y por el W3C , normalmente reflejan un punto de vista esbozado en una Recomendación del W3C del 30 de julio de 2001, que reconoce la precedencia del término URI en lugar de respaldar cualquier subdivisión formal en URL y URN.
La URL es un concepto útil pero informal: una URL es un tipo de URI que identifica un recurso a través de una representación de su mecanismo de acceso principal (por ejemplo, su "ubicación" de red), en lugar de algunos otros atributos que pueda tener.
Como tal, una URL es simplemente un URI que apunta a un recurso en una red. Sin embargo, en contextos no técnicos y en software para la World Wide Web, el término "URL" sigue siendo ampliamente utilizado. Además, el término "dirección web" (que no tiene una definición formal) a menudo aparece en publicaciones no técnicas como sinónimo de un URI que utiliza los esquemas http o https . Tales suposiciones pueden generar confusión, por ejemplo, en el caso de los espacios de nombres XML que tienen una similitud visual con los URI que se pueden resolver .
Las especificaciones producidas por WHATWG prefieren URL sobre URI , por lo que las API HTML5 más nuevas usan URL sobre URI .
Estandarizar en el término URL. URI e IRI [Identificador de recurso internacionalizado] son confusos. En la práctica, se usa un solo algoritmo para ambos, por lo que mantenerlos distintos no ayuda a nadie. La URL también gana fácilmente el concurso de popularidad de resultados de búsqueda.
Si bien la mayoría de los esquemas de URI se diseñaron originalmente para usarse con un protocolo en particular y, a menudo, tienen el mismo nombre, son semánticamente diferentes de los protocolos. Por ejemplo, el esquema http se usa generalmente para interactuar con recursos web usando HTTP, pero el archivo de esquema no tiene protocolo.
Sintaxis
Cada URI comienza con un nombre de esquema que se refiere a una especificación para asignar identificadores dentro de ese esquema. Como tal, la sintaxis de URI es un sistema de nombres federado y extensible en el que la especificación de cada esquema puede restringir aún más la sintaxis y la semántica de los identificadores que utilizan ese esquema. La sintaxis genérica de URI es un superconjunto de la sintaxis de todos los esquemas de URI. Se definió por primera vez en RFC 2396 , publicado en agosto de 1998 y finalizado en RFC 3986 , publicado en enero de 2005.
La sintaxis genérica de URI consta de una secuencia jerárquica de cinco componentes :
URI = scheme:[//authority]path[?query] [#fragment]
donde el componente de autoridad se divide en tres subcomponentes :
authority = [userinfo@]host[:port]
Esto se representa en un diagrama de sintaxis como:
El URI comprende:
- Un no vacio
componente de esquema seguido de dos puntos (
:
), que consta de una secuencia de caracteres que comienza con una letra y seguida de cualquier combinación de letras, dígitos, más (+
), punto (.
) o guión (-
). Aunque los esquemas no distinguen entre mayúsculas y minúsculas, la forma canónica es en minúsculas y los documentos que especifican esquemas deben hacerlo con letras minúsculas. Ejemplos de esquemas populares incluyenhttp
,https
,ftp
,mailto
,file
,data
, yirc
. Los esquemas de URI deben registrarse en laAutoridad de Números Asignados de Internet (IANA), aunque en la práctica se utilizan esquemas no registrados. - Un opcional componente de autoridad precedido por dos barras (
//
), que comprende:- Un opcional subcomponente
:
), seguidos de un símbolo arroba (@
). El uso del formatousername:password
en el subcomponente userinfo está en desuso por razones de seguridad. Las aplicaciones no deben mostrar como texto claro ningún dato después de los primeros dos puntos (:
) que se encuentran dentro de un subcomponente de información de usuario, a menos que los datos después de los dos puntos sean la cadena vacía (que indica que no hay contraseña). - A subcomponente de host , que consta de un nombre registrado (que incluye, entre otros, unnombre de host) o unadirección IP. LasdireccionesIPv4deben estar ennotación decimal con puntosylasdireccionesIPv6deben estar entre corchetes (
[]
). - Un opcional subcomponente de puerto precedido por dos puntos (
:
).
/
). Siempre se define una ruta para un URI, aunque la ruta definida puede estar vacía (longitud cero). Un segmento también puede estar vacío, lo que da como resultado dos barras diagonales consecutivas (//
) en el componente de ruta. Un componente de ruta puede parecerse o correlacionarse exactamente con unaruta del sistema de archivos,pero no siempre implica una relación con uno. Si hay un componente de autoridad, entonces el componente de ruta debe estar vacío o comenzar con una barra inclinada (/
). Si un componente de autoridad está ausente, entonces la ruta no puede comenzar con un segmento vacío, es decir, con dos barras (//
), ya que los siguientes caracteres se interpretarían como un componente de autoridad. El segmento final de la ruta puede denominarse "slug".Delimitador de consultas | Ejemplo |
---|---|
Ampersand ( & )
|
key1=value1&key2=value2
|
Punto y coma ( ; )
|
key1=value1;key2=value2
|
- Un opcional componente de consulta precedido por un signo de interrogación (
?
), que contiene unacadenadeconsultade datos no jerárquicos. Su sintaxis no está bien definida, pero por convención suele ser una secuencia depares atributo-valorseparados por undelimitador. - Un opcional componente de fragmento precedido por unhash(
#
). El fragmento contiene unidentificador de fragmento queproporciona dirección a un recurso secundario, como un encabezado de sección en un artículo identificado por el resto del URI. Cuando el recurso principal es undocumentoHTML, el fragmento suele ser unid
atributode un elemento específico y los navegadores web desplazarán este elemento a la vista.
Las cadenas de octetos de datos dentro de un URI se representan como caracteres. Los caracteres permitidos dentro de un URI son los caracteres ASCII para las letras minúsculas y mayúsculas del alfabeto inglés moderno , los números arábigos , el guión , el punto , el subrayado y la tilde . Los octetos representados por cualquier otro carácter deben estar codificados en porcentaje .
Del conjunto de caracteres ASCII, los caracteres : / ? # [ ] @
están reservados para su uso como delimitadores de los componentes URI genéricos y deben estar codificados en porcentaje, por ejemplo, %3F
para un signo de interrogación. La ! $ & ' ( ) * + , ; =
sintaxis genérica de URI permite que los caracteres se utilicen sin codificar en la información del usuario, el host y la ruta como delimitadores. Adicionalmente, :
y @
puede aparecer sin codificar dentro de la trayectoria, consulta, y el fragmento; y ?
y /
puede aparecer sin codificar como datos dentro de la consulta o fragmento.
La siguiente figura muestra ejemplos de URI y sus componentes.
userinfo anfitrión puerto ┌──┴───┐ ┌──────┴──────┐ ┌┴┐ https: //john.doe@www.example.com: 123 / forum / questions /? tag = networking & order = newest # top └─┬─┘ └───────────┬──────────────┘ └───────┬────────┘ └───────────┬─────────────┘ └┬┘ Fragmento de consulta de ruta de autoridad de esquema ldap: // [2001: db8 :: 7] / c = GB? objectClass? one └┬─┘ └─────┬─────┘└─┬─┘ └──────┬──────┘ consulta de ruta de autoridad del esquema mailto: John.Doe@example.com └─┬──┘ └────┬─────────────┘ ruta del esquema noticias: comp.infosystems.www.servers.unix └┬─┘ └─────────────┬─────────────────┘ ruta del esquema tel: + 1-816-555-1212 └┬┘ └──────┬──────┘ ruta del esquema telnet: //192.0.2.16: 80 / └─┬──┘ └─────┬─────┘│ ruta de autoridad del esquema urna: oasis: nombres: especificación: docbook: dtd: xml: 4.1.2 └┬┘ └─────────────────────┬───────────────────────┘ ruta del esquema
Referencias URI
Una referencia de URI es un URI o una referencia relativa cuando no comienza con un componente de esquema seguido de dos puntos ( :
). Un segmento de ruta que contiene un carácter de dos puntos (p. Ej., foo:bar
) No se puede usar como el primer segmento de ruta de una referencia relativa si su componente de ruta no comienza con una barra oblicua ( /
), ya que se confundiría con un componente de esquema. Dicho segmento de ruta debe estar precedido por un segmento de ruta de puntos (p ./foo:bar
. Ej., ).
Los lenguajes de marcado de documentos web utilizan con frecuencia referencias URI para señalar otros recursos, como documentos externos o partes específicas del mismo documento lógico:
- en HTML , el valor del
src
atributo delimg
elemento proporciona una referencia URI, al igual que el valor delhref
atributo del elementoa
olink
; - en XML , el identificador del sistema que aparece después de la
SYSTEM
palabra clave en un DTD es una referencia URI sin fragmentos; - en XSLT , el valor del
href
atributo delxsl:import
elemento / instrucción es una referencia URI; del mismo modo, el primer argumento de ladocument()
función.
https://example.com/path/resource.txt#fragment //example.com/path/resource.txt /path/resource.txt path/resource.txt ../resource.txt ./resource.txt resource.txt #fragment
Resolución
Resolver una referencia de URI con un URI base da como resultado un URI de destino . Esto implica que el URI base existe y es un URI absoluto (un URI sin componente de fragmento). El URI base se puede obtener, en orden de precedencia, de:
- el URI de referencia en sí mismo si es un URI;
- el contenido de la representación;
- la entidad que encapsula la representación;
- el URI utilizado para la recuperación real de la representación;
- el contexto de la aplicación.
Dentro de una representación con un URI base bien definido de
http://a/b/c/d;p?q
una referencia relativa se resuelve a su URI de destino de la siguiente manera:
"g:h" -> "g:h" "g" -> "http://a/b/c/g" "./g" -> "http://a/b/c/g" "g/" -> "http://a/b/c/g/" "/g" -> "http://a/g" "//g" -> "http://g" "?y" -> "http://a/b/c/d;p?y" "g?y" -> "http://a/b/c/g?y" "#s" -> "http://a/b/c/d;p?q#s" "g#s" -> "http://a/b/c/g#s" "g?y#s" -> "http://a/b/c/g?y#s" ";x" -> "http://a/b/c/;x" "g;x" -> "http://a/b/c/g;x" "g;x?y#s" -> "http://a/b/c/g;x?y#s" "" -> "http://a/b/c/d;p?q" "." -> "http://a/b/c/" "./" -> "http://a/b/c/" ".." -> "http://a/b/" "../" -> "http://a/b/" "../g" -> "http://a/b/g" "../.." -> "http://a/" "../../" -> "http://a/" "../../g" -> "http://a/g"
Mezcla de URL
La conversión de URL es una técnica mediante la cual se agrega un comando a una URL, generalmente al final, después de un "?" token . Se usa comúnmente en WebDAV como un mecanismo para agregar funcionalidad a HTTP . En un sistema de control de versiones, por ejemplo, para agregar un comando de "pago" a una URL, se escribe como http://editing.com/resource/file.php?command=checkout
. Tiene la ventaja de ser fácil para los analizadores CGI y también actúa como intermediario entre HTTP y el recurso subyacente, en este caso.
Relación con los espacios de nombres XML
En XML , un espacio de nombres es un dominio abstracto al que se puede asignar una colección de nombres de elementos y atributos. El nombre del espacio de nombres es una cadena de caracteres que debe adherirse a la sintaxis genérica de URI. Sin embargo, el nombre generalmente no se considera un URI, porque la especificación del URI basa la decisión no solo en los componentes léxicos, sino también en su uso previsto. Un nombre de espacio de nombres no implica necesariamente ninguna de las semánticas de los esquemas URI; por ejemplo, un nombre de espacio de nombres que comience con http: puede no tener una connotación para el uso de HTTP .
Originalmente, el nombre del espacio de nombres podía coincidir con la sintaxis de cualquier referencia URI no vacía, pero el W3C desaprobó el uso de referencias URI relativas. Una especificación W3C separada para espacios de nombres en XML 1.1 permite que las referencias de identificadores de recursos internacionalizados (IRI) sirvan como base para los nombres de espacios de nombres además de las referencias URI.
Ver también
- CURIE
- Identificador de recursos uniforme desreferenciable
- Identificador de recursos extensible
- Identificador de recursos internacionalizado (IRI)
- Localizador de recursos de Internet
- Localizador de recursos uniforme persistente
- Convención de nomenclatura uniforme
- Idioma de descripción del directorio de recursos
- Identificador universalmente único
- Lista de esquemas de URI
Notas
Referencias
Otras lecturas
- Harold, Elliotte Rusty (2004). XML 1.1 Biblia (Tercera ed.). Wiley Publishing . pag. 291. ISBN 978-0-7645-4986-1.
- Hansen, Tony; Hardie, Ted (junio de 2015). Thaler, Dave (ed.). "Directrices y procedimientos de registro para esquemas URI" . Páginas de solicitud de comentarios (RFC) de Ietf: prueba . Grupo de trabajo de ingeniería de Internet . ISSN 2070-1721 .
- Morrison, Michael Wayne (2006). "Hora 5: Uso de espacios de nombres ". Sams Teach Yourself XML . Sams Publishing . pag. 91.
- Grupo de interés de planificación de URI, W3C / IETF (2001-09-21). "URI, URL y URN: aclaraciones y recomendaciones 1.0" . Consultado el 27 de julio de 2009 .
- "Sobre la vinculación de representaciones alternativas para permitir el descubrimiento y la publicación" . Consorcio World Wide Web . 2006 [2001] . Consultado el 3 de abril de 2012 .
- Bray, Tim ; Hollander, Dave; Layman, Andrew; Tobin, Richard, eds. (16 de agosto de 2006). "Espacios de nombres en XML 1.1 (segunda edición)" . Consorcio World Wide Web . 2.2 Uso de URI como nombres de espacios de nombres . Consultado el 31 de agosto de 2015 .
- Ayers, Danny; Völkel, Max (3 de diciembre de 2008). Sauermann, Leo; Cyganiak, Richard (eds.). "URI geniales para la Web semántica" . Consorcio World Wide Web . Consultado el 3 de abril de 2012 .
- Bray, Tim ; Hollander, Dave; Layman, Andrew; Tobin, Richard; Thompson, Henry S., eds. (8 de diciembre de 2009). "Espacios de nombres en XML 1.0 (tercera edición)" . Consorcio World Wide Web . 2.2 Uso de URI como nombres de espacios de nombres . Consultado el 31 de agosto de 2015 .
- Berners-Lee, Tim ; Connolly, Daniel "Dan" (noviembre de 1995). "Lenguaje de marcado de hipertexto - 2.0" . Grupo de trabajo de ingeniería de Internet . Consultado el 13 de septiembre de 2015 .
- Berners-Lee, Tim ; Fielding, Roy T .; Masinter, Larry (agosto de 1998). Identificadores uniformes de recursos (URI): sintaxis genérica . Grupo de trabajo de ingeniería de Internet . doi : 10.17487 / RFC2396 . RFC 2396 . Consultado el 31 de agosto de 2015 .
- Berners-Lee, Tim ; Fielding, Roy T .; Masinter, Larry (enero de 2005). Identificadores uniformes de recursos (URI): sintaxis genérica . Grupo de trabajo de ingeniería de Internet . doi : 10.17487 / RFC3986 . RFC 3986 . Consultado el 31 de agosto de 2015 .
- Berners-Lee, Tim ; Fielding, Roy T .; Masinter, Larry (enero de 2005). Identificadores uniformes de recursos (URI): Sintaxis genérica, sección 3, Componentes de sintaxis . Grupo de trabajo de ingeniería de Internet . doi : 10.17487 / RFC3986 . RFC 3986 . Consultado el 31 de agosto de 2015 .
- Lawrence, Eric (6 de marzo de 2014). "Browser Arcana: Literales IP en URL" . IEInternals . Microsoft . Consultado el 25 de abril de 2016 .
- Whitehead, EJ (1998). "WebDAV: estándar IEFT para la autoría colaborativa en la Web" . Computación por Internet IEEE . 2 (5). doi : 10.1109 / 4236.722228 . ISSN 1941-0131 . Consultado el 12 de octubre de 2021 .
enlaces externos
- Esquemas URI : registro mantenido por IANA de esquemas URI
- Esquemas de URI en la wiki de W3C
- Arquitectura de la World Wide Web, Volumen uno, §2: Identificación - por W3C
- Aclaración de URI del W3C