Skip to content

1 URI

URI

Una URI (Uniform Resource Identifier, identificador de recurso uniforme) es una cadena de caracteres con una determinada sintaxis que sirve para identificar un recurso. El recurso identificado puede ser un fichero en un servidor, la dirección de una determinada máquina en Internet, una dirección de email, un número de teléfono, etc.

Una URI es una cadena que sigue el siguiente formato [scheme:]scheme-specific-part[#fragment], es decir, que está formada por el nombre de esquema utilizado (scheme), que es opcional, una parte específica, cuya sintaxis depende del esquema del que se trate, y, opcionalmente, un fragmento (fragment) que se hace preceder por el carácter #.

URI

Figura 1 - URI

Los nombres de esquemas (scheme) más habituales son:

  • file: Para identificar un fichero disponible en un disco local.
  • ftp: Para identificar un recurso disponible en un servidor FTP.
  • http: Para identificar un recurso disponible en un servidor Web accesible a través del protocolo HTTP.
  • mailto: Para identificar una dirección de email.

Aunque no existe una sintaxis genérica que se aplique a la parte específica de todos los esquemas, la mayoría de los esquemas son jerárquicos, por lo que siguen un formato genérico //authority/path?query, con el siguiente significado:

  • Authority (autoridad): Autoridad responsable de resolver el resto de la URI.
  • Path: Ruta para localizar el recurso dentro de la autoridad. Si el camino es jerarquico, las partes son separadas mediante el carácter / y los operadores . (actual) y .. (padre) son usados para navegar por la jerarquía.
  • Query: Opcional. Datos aportados para consultar el recurso, que se conocen como parámetros (parameters).

Veamos algunos ejemplos:

  • http://www.informaticasaladillo.es/archivos/ejercicio1.txt : el esquema es http, la autoridad es http://www.informaticasaladillo.es, la ruta es /archivos/ejercicio1.txt y no dispone de consulta.
  • urn:isbn:156592870 : tiene el esquema urn pero no sigue el formato genérico mencionado.
  • ftp://mp3:mp3@ci43198-a.ashvil1.nc.home.com:33/VanHalen-Jump.mp3 : el esquema es ftp, la autoridad es mp3:mp3@ci43198-a.ashvil1.nc.home.com:33, que incluye el nombre de usuario mp3, la contraseña mp3, el host ci43198-a.ashvil1.nc.home.com y el puerto 33, y el camino es /VanHalen-Jump.mp3.

Debemos tener en cuenta que hay algunos caracteres que no podremos usar dentro de las URI porque ya tienen un significado especial, por lo que deberemos sustituirlos por su representación usando el cáracter % seguido del valor hexadecimal del carácter en cuestión:

Carácter original Carácter codificado Carácter original Carácter codificado
/ %2F ? %3F
: %3A @ %40
= %3D & %26
" %22 \ %5C
' %60 ~ %7E
``(espacio en blanco) %20 # %23

Por otra parte, aunque desde hace tiempo ya es posible incluir en las URL caracteres de otros idiomas que no sean el inglés, aún no es completamente seguro utilizar estos caracteres en las URL. Si se utilizan letras como ñ, á, é o ç, es posible que algunos navegadores no las interpreten de forma correcta.

La solución consiste en codificar todos los caracteres que no existen en inglés. La siguiente tabla muestra la codificación de los caracteres más utilizados:

Carácter original Carácter codificado Carácter original Carácter codificado
ñ %F1 Ñ %D1
á %E1 Á %C1
é %E9 É %C9
í %ED Í %CD
ó %F3 Ó %D3
ú %FA Ú %DA
ç %E7 Ç %C7

El estándar RFC 2396 especifica qué caracteres están permitidos en las distintas partes de una URI

Más adelante veremos que Java proporciona las clases de utilidad URLEncoder y URLDecoder para asistirnos, respectivamente, en la tarea de codificar o descodificar una cadena correspondiente a una Uri.

La clase Java URI representa una URI, proporcionando distintos constructores sobrecargados para crear un objeto URI proporcionando sus partes: URI(string), URI(scheme, schemeSpecificPart, fragment), URI(scheme, host, path, fragment).

La clase URI proporciona una serie de métodos informativos para obtener las distintas partes de la URI, como por ejemplo getSchemed(), getAuthority(), getPath(), getPort(), getQuery(), etc.

Si queremos obtener la representación en cadena de un objeto URI podemos usar su método toString().