Saltar al contenido principal
riqo.ioHerramientas para grandes ideas

URL, URI y percent-encoding

Cómo se estructuran URI y URL, qué caracteres tienen función sintáctica y cuándo interviene el percent-encoding.

URI, URL y componentes

URI es el término general para identificadores de recursos; URL describe URI que además indican un mecanismo o lugar de acceso. En la web suelen distinguirse scheme, authority, path, query y fragment, cada uno con reglas propias.

Los límites importan porque un carácter puede ser sintaxis en una posición y dato en otra. Codificar indiscriminadamente un URL completo puede destruir delimitadores necesarios.

Caracteres reserved y unreserved

RFC 3986 distingue caracteres unreserved, que normalmente pueden aparecer literalmente, y reserved, que pueden actuar como delimitadores. Letras ASCII, dígitos, guion, punto, underscore y tilde son unreserved.

Caracteres como :, /, ?, #, [, ], @ y varios sub-delimiters pueden aportar estructura. Codificarlos como datos depende del componente concreto en el que aparecen.

De texto Unicode a bytes UTF-8

El percent-encoding representa bytes: cada byte se expresa con % y dos dígitos hexadecimales. Un carácter Unicode no ASCII se transforma primero a UTF-8 y puede generar varios bytes y varias secuencias %HH.

Por eso un solo carácter visible puede expandirse mucho. Una decodificación correcta reconstruye primero los bytes y después los interpreta con el encoding acordado, normalmente UTF-8.

Path, query y form encoding

En un path, las barras y segmentos tienen significado estructural. En una query, ampersand e igual se usan habitualmente para pares nombre-valor, aunque la sintaxis URI no impone un único modelo universal de datos de consulta.

application/x-www-form-urlencoded añade una convención distinta: el espacio suele representarse con + y un signo + literal debe codificarse. No debe confundirse con el percent-encoding genérico de URI.

Normalización y equivalencia

Los dígitos hexadecimales del percent-encoding no distinguen mayúsculas y minúsculas, y algunos caracteres unreserved codificados pueden normalizarse a forma literal. Aun así, dos URL textualmente distintos no son siempre equivalentes.

La normalización de host, puertos por defecto, path y query depende del protocolo y del servidor. Evita reescrituras agresivas cuando la identidad exacta o una firma criptográfica dependan de la representación original.

Errores de decodificación y seguridad

Secuencias de porcentaje incompletas, dígitos no hexadecimales o bytes que no forman UTF-8 válido deben tratarse explícitamente. Decodificadores permisivos pueden provocar interpretaciones distintas entre proxy, framework y aplicación.

Las diferencias de canonicalización pueden facilitar bypass de routing, cache o validaciones. Decodifica en la capa correcta, evita decodificaciones repetidas y valida después cada componente según su semántica.

Guías relacionadas

Query string y application/x-www-form-urlencoded

Estructura de query strings, pares nombre-valor, percent-encoding y reglas específicas de los formularios HTML.

Normalización URI, reserved/unreserved y equivalencia

Cuándo dos URI pueden considerarse equivalentes y por qué canonicalization y percent-encoding requieren contexto.