Guías Web y HTTP

Cómo funcionan las URL y las cadenas de consulta

Las siete partes de una URL, qué caracteres necesitan codificación porcentual y por qué, cómo las cadenas de consulta llevan claves repetidas y cómo los nombres de dominio internacionales se convierten en punycode.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Una URL (localizador uniforme de recursos) es una dirección con hasta siete partes. Lo que sigue a ? es la cadena de consulta, una lista de pares clave=valor que pasa pequeñas cantidades de datos al servidor. Como unos pocos caracteres tienen significado especial dentro de una URL, cualquier dato que los contenga debe codificarse en porcentaje.

Anatomía de una URL

Tomemos esta dirección:

https://[email protected]:8443/shop/shoes?q=red+shoes&size=9&tag=a&tag=b#reviews
Parte Valor Notas
Esquema https Qué protocolo usar
Información de usuario user Poco común y mejor evitarla
Host www.example.com Qué servidor; no distingue mayúsculas
Puerto 8443 Por defecto: 80 para HTTP, 443 para HTTPS
Ruta /shop/shoes Qué recurso del servidor
Consulta q=red+shoes&size=9&tag=a&tag=b Parámetros, tras ?
Fragmento reviews Un punto dentro de la página; nunca se envía al servidor

Pega cualquier dirección en el analizador de URL para ver estas partes y cada parámetro de consulta por separado.

Codificación porcentual

Los caracteres reservados tienen funciones en una URL: ? inicia la consulta, & separa pares, = separa clave y valor, # inicia el fragmento, / separa segmentos de ruta. Para usar uno como dato normal, escribe % seguido de su valor en bytes en hexadecimal. Los caracteres fuera de ASCII se convierten primero en bytes UTF-8 y se codifica cada byte.

Carácter Codificado
espacio %20 (o + en consultas de formulario)
# %23
& %26
= %3D
? %3F
/ %2F
% %25
é %C3%A9
€ %E2%82%AC

Codifica y decodifica texto con el codificador de URL y el decodificador de URL. Ten en cuenta que % debe codificarse como %25, por lo que decodificar dos veces estropea los valores.

Cadenas de consulta

Los pares se separan con &. La misma clave puede repetirse y los receptores deciden cómo leerla. Al analizar la consulta anterior se obtiene:

Clave Valores
q red shoes
size 9
tag a, b (la clave aparece dos veces)

Para construir una consulta bien codificada, introduce los pares en el constructor de cadenas de consulta. Por ejemplo, los valores red shoes & boots y 10-20 se convierten en q=red+shoes+%26+boots&price=10-20. Las etiquetas de campaña son una aplicación de la misma idea: consulta Cómo crear enlaces UTM para el seguimiento de campañas.

Nombres de dominio internacionales

Los nombres de host viajan en ASCII. Un nombre con letras acentuadas o no latinas se convierte a punycode y se prefija con xn--: münchen.de pasa a ser xn--mnchen-3ya.de. Las letras parecidas de otros alfabetos hacen que el mismo mecanismo sea un favorito de los estafadores, así que convierte los hosts sospechosos con el conversor de nombre de host a Punycode.

Errores comunes

  • Olvidar codificar un valor. Un & o # sin escapar en un valor lo corta en silencio.
  • Doble codificación. Codificar una cadena ya codificada convierte %20 en %2520.
  • Poner secretos en la URL. Las cadenas de consulta acaban en registros, historial y cabeceras de referencia.
  • Suponer un valor por clave. Lee las claves repetidas como listas.
  • Fiarse de la parte visible de un enlace. Consulta Cómo analizar un enlace sospechoso con seguridad.

Pruebe estas herramientas

Véase también

  • Glosario URL
    Una URL (Uniform Resource Locator) es la dirección de un recurso en la web, como una página, una imagen o un punto de acceso de una API.
  • Glosario Cadena de consulta (query string)
    Una cadena de consulta es la parte de una URL después del signo de interrogación que lleva valores con nombre para el servidor.
  • Glosario Punycode
    Punycode es la codificación que permite guardar en el DNS, que solo admite ASCII, nombres de dominio con caracteres no ASCII.
  • Glosario HTTP
    HTTP (Hypertext Transfer Protocol) es el protocolo que usan navegadores y servidores para solicitar y enviar páginas web, archivos y datos.
  • Glosario Nombre de dominio
    Un nombre de dominio es la dirección legible de un sitio web o servicio, como example.com, que el DNS traduce en una dirección IP.
  • Glosario Codificación porcentual
    La codificación porcentual escribe un carácter que no está permitido en una URL, o que tiene allí un significado especial.
  • Glosario Parámetros UTM
    Los parámetros UTM son etiquetas añadidas al final de una URL, como utm_source y utm_campaign.

Preguntas frecuentes

En la ruta de una URL el espacio debe escribirse como %20. En una cadena de consulta enviada por un formulario HTML, la convención antigua lo escribe como +. Los servidores decodifican ambos dentro de una consulta, pero solo %20 es seguro en todas partes.

No. El fragmento lo gestiona el navegador y no se envía en la petición, así que no puede usarse para decisiones en el servidor.

El esquema y el host no, pero la ruta normalmente sí, y los valores de consulta también en la mayoría de los servidores. /Shop y /shop pueden ser páginas distintas.

AdSense Placeholder
Slot: footer_leaderboard