
La normalización de URI es el proceso mediante el cual las URI se modifican y estandarizan de manera consistente. El objetivo de este proceso es transformar una URI en una URI normalizada, de modo que sea posible determinar si dos URI sintácticamente diferentes pueden ser equivalentes.
Los motores de búsqueda utilizan la normalización de URI para clasificar correctamente las páginas que pueden encontrarse con múltiples URI y para reducir la indexación de páginas duplicadas. Los rastreadores web realizan la normalización de URI para evitar rastrear el mismo recurso más de una vez. Los navegadores web pueden realizar la normalización para determinar si se ha visitado un enlace o si se ha almacenado en caché una página . Los servidores web también pueden realizar la normalización por diversas razones (por ejemplo, para interceptar más fácilmente los riesgos de seguridad derivados de las solicitudes de los clientes, para usar un único nombre de archivo absoluto para cada recurso almacenado en sus cachés, nombrado en los archivos de registro, etc.).
Proceso de normalización
Se pueden realizar varios tipos de normalización. Algunos de ellos siempre conservan la semántica y otros no.
Normalizaciones que preservan la semántica
Las siguientes normalizaciones se describen en RFC 3986 [ 1 ] para obtener URI equivalentes:
- Conversión de tripletes codificados en porcentaje a mayúsculas. Los dígitos hexadecimales dentro de un triplete codificado en porcentaje de la URI (por ejemplo,
%3aversus%3A) no distinguen entre mayúsculas y minúsculas y, por lo tanto, deben normalizarse para usar letras mayúsculas para los dígitos AF. [ 2 ] Ejemplo:
http://example.com/foo%2a→http://example.com/foo%2A
- Convertir el esquema y el host a minúsculas. Los componentes esquema y host de la URI no distinguen entre mayúsculas y minúsculas y, por lo tanto, deben normalizarse a minúsculas. [ 3 ] Ejemplo:
HTTP://User@Example.COM/Foo→http://User@example.com/Foo
- Decodificación de tripletes codificados en porcentaje de caracteres no reservados. Los tripletes codificados en porcentaje de la URI en los rangos de ALPHA (
%41–%5Ay%61–%7A), DIGIT (%30–%39), guion (–%2D), punto (–%2E), guion bajo (%5F–) o tilde (–%7E) no requieren codificación en porcentaje y deben decodificarse a sus caracteres no reservados correspondientes. [ 4 ] Ejemplo:
http://example.com/%7Efoo→http://example.com/~foo
- Eliminación de segmentos de punto. Los segmentos de punto
.y..en el componente de ruta de la URI deben eliminarse aplicando el algoritmo remove_dot_segments [ 5 ] a la ruta descrita en RFC 3986. [ 6 ] Ejemplo:
http://example.com/foo/./bar/baz/../qux→http://example.com/foo/bar/qux
- Convertir una ruta vacía en una ruta "/". En presencia de un componente de autoridad, un componente de ruta vacía debe normalizarse a un componente de ruta de "/". [ 7 ] Ejemplo:
http://example.com→http://example.com/
- Eliminación del puerto predeterminado. Se debe eliminar un componente de puerto vacío o predeterminado de la URI (puerto 80 para el
httpesquema) con su delimitador ":". [ 7 ] Ejemplo:
http://example.com:80/→http://example.com/
Normalizaciones que generalmente preservan la semántica
Para las URI HTTP y HTTPS, las siguientes normalizaciones enumeradas en RFC 3986 pueden dar como resultado URI equivalentes, pero no están garantizadas por los estándares:
- Agregar una barra diagonal al final de una ruta no vacía. Los directorios (carpetas) se indican con una barra diagonal al final y deben incluirse en las URI. Ejemplo:
http://example.com/foo→http://example.com/foo/- Sin embargo, no hay forma de saber si un componente de ruta URI representa un directorio o no. El RFC 3986 señala que si la primera URI redirige a la segunda, eso indica que son equivalentes.
Normalizaciones que cambian la semántica
La aplicación de las siguientes normalizaciones da como resultado una URI semánticamente diferente, aunque pueda referirse al mismo recurso:
- Eliminación del índice de directorio. Los índices de directorio predeterminados generalmente no son necesarios en las URI. Ejemplos:
http://example.com/a/index.html→http://example.com/a/http://example.com/default.asp→http://example.com/
- Eliminación del fragmento. El componente de fragmento de una URI nunca es visto por el servidor y, en ocasiones, puede eliminarse. Ejemplo:
http://example.com/bar.html#section1→http://example.com/bar.html- Sin embargo, las aplicaciones AJAX utilizan con frecuencia el valor del fragmento.
- Reemplazar la IP con el nombre de dominio. Comprobar si la dirección IP se corresponde con un nombre de dominio. Ejemplo:
http://208.77.188.166/→http://example.com/- La reversión de la operación rara vez es segura debido a los servidores web virtuales .
- Limitación de protocolos. Limitación de diferentes protocolos de capa de aplicación . Por ejemplo, el esquema “https” podría reemplazarse por “http”. Ejemplo:
https://example.com/→http://example.com/
- Eliminación de barras diagonales duplicadas Las rutas que incluyen dos barras diagonales adyacentes se pueden convertir en una sola. Ejemplo:
http://example.com/foo//bar.html→http://example.com/foo/bar.html
- Eliminar o agregar “www” como primera etiqueta de dominio. Algunos sitios web operan de forma idéntica en dos dominios de Internet: uno cuya etiqueta menos significativa es “www” y otro cuyo nombre es el resultado de omitir la etiqueta menos significativa del nombre del primero, este último conocido como dominio desnudo . Por ejemplo,
http://www.example.com/yhttp://example.com/pueden acceder al mismo sitio web. Muchos sitios web redirigen al usuario de la dirección www a la dirección sin www o viceversa. Un normalizador puede determinar si una de estas URI redirige a la otra y normalizar todas las URI adecuadamente. Ejemplo:
http://www.example.com/→http://example.com/
- Ordenación de los parámetros de consulta. Algunas páginas web utilizan más de un parámetro de consulta en la URI. Un normalizador puede ordenar los parámetros alfabéticamente (junto con sus valores) y reconstruir la URI. Ejemplo:
http://example.com/display?lang=en&article=fred→http://example.com/display?article=fred&lang=en- Sin embargo, el orden de los parámetros en una URI puede ser significativo (esto no está definido por el estándar) y un servidor web puede permitir que la misma variable aparezca varias veces. [ 8 ]
- Eliminación de variables de consulta no utilizadas. Una página puede esperar que solo aparezcan ciertos parámetros en la consulta; los parámetros no utilizados se pueden eliminar. Ejemplo:
http://example.com/display?id=123&fakefoo=fakebar→http://example.com/display?id=123- Tenga en cuenta que un parámetro sin valor no es necesariamente un parámetro no utilizado.
- Eliminación de parámetros de consulta predeterminados. Un valor predeterminado en la cadena de consulta puede mostrarse de forma idéntica tanto si está presente como si no. Ejemplo:
http://example.com/display?id=&sort=ascending→http://example.com/display
- Eliminar el signo de interrogación cuando la consulta está vacía. Cuando la consulta está vacía, puede que no sea necesario el signo de interrogación. Ejemplo:
http://example.com/display?→http://example.com/display
Normalización basada en listas de URI
Se pueden desarrollar algunas reglas de normalización para sitios web específicos examinando listas de URI obtenidas de rastreos anteriores o registros del servidor web. Por ejemplo, si la URI
http://example.com/story?id=xyz
aparece varias veces en un registro de rastreo junto con
http://example.com/story_xyz
Podemos suponer que las dos URI son equivalentes y que pueden normalizarse a una de las formas de URI.
Schonfeld et al. (2006) presentan una heurística llamada DustBuster para detectar reglas DUST (diferentes URI con texto similar) que se pueden aplicar a listas de URI. Demostraron que, una vez encontradas las reglas DUST correctas y aplicadas con un algoritmo de normalización, pudieron encontrar hasta el 68 % de las URI redundantes en una lista de URI.
Véase también
- URL (Localizador Uniforme de Recursos)
- fragmento URI
- Rastreador web
Referencias
- ↑ RFC 3986, Sección 6. Normalización y comparación
- ↑ RFC 3986, Sección 6.2.2.1. Normalización de casos
- ↑ RFC 3986, Sección 6.2.2.1. Normalización de casos
- ↑ RFC 3986, Sección 6.2.2.3. Normalización de segmentos de ruta
- ↑ RFC 3986, 5.2.4. Eliminar segmentos de puntos
- ↑ RFC 3986, 6.2.2.3. Normalización de segmentos de ruta
- 1 2 RFC 3986, Sección 6.2.3. Normalización basada en esquemas
- ↑ "Desmitificando $.param en jQuery 1.4" . Ben Alman. 20 de diciembre de 2009. Consultado el 24 de agosto de 2013 .
- RFC 3986 - Identificador uniforme de recursos (URI): Sintaxis genérica
- Sang Ho Lee; Sung Jin Kim y Seok Hoo Hong (2005). Sobre la normalización de URL (PDF) . Actas de la Conferencia Internacional sobre Ciencia Computacional y sus Aplicaciones (ICCSA 2005). págs. 1076–1085 . Archivado del original (PDF) el 18 de septiembre de 2006.
- Uri Schonfeld; Ziv Bar-Yossef e Idit Keidar (2006). No te arrastres en el polvo: diferentes URL con texto similar . Actas de la 15.ª conferencia internacional sobre la World Wide Web . págs. 1015–1016 .
- Uri Schonfeld; Ziv Bar-Yossef e Idit Keidar (2007). No te arrastres en el polvo: diferentes URL con texto similar . Actas de la 16.ª conferencia internacional sobre la World Wide Web. págs. 111-120 .
- URL
- algoritmos de búsqueda en Internet