ToolDeck

Analizador de URL

Analiza una URL en sus componentes — protocolo, host, ruta, parámetros de consulta, hash

Prueba un ejemplo

¿Qué es el análisis de URL?

El análisis de URL es el proceso de descomponer un Localizador de Recursos Uniforme en sus componentes individuales: protocolo (esquema), hostname, puerto, pathname, parámetros de consulta e identificador de fragmento. Toda URL sigue una estructura definida por RFC 3986 y el Estándar de URL WHATWG. Un analizador de URL lee la cadena sin procesar, identifica cada segmento por sus caracteres delimitadores (://, :, /, ?, #, &, =) y los devuelve como campos separados y accesibles.

Los navegadores realizan el análisis de URL cada vez que escribes una dirección o haces clic en un enlace. El constructor URL de JavaScript, el módulo urllib.parse de Python y el paquete net/url de Go implementan analizadores que siguen las mismas reglas estructurales. Analizar una URL es la operación inversa a la codificación de URL: en lugar de transformar caracteres para el transporte seguro, descompones una URL ya formada en las partes que la componen.

Una URL típica como https://api.example.com:8080/v1/users?page=2&limit=10#section contiene seis componentes distintos. Los caracteres delimitadores — ://, :, /, ?, &, =, y # — son los que hacen que el análisis sea determinista: cada uno señala un límite y permite que el analizador extraiga campos sin ambigüedad.

¿Por qué usar un analizador de URL online?

Dividir una URL manualmente a ojo es propenso a errores, especialmente cuando la cadena contiene caracteres codificados, múltiples parámetros de consulta o puertos no estándar. Esta herramienta analiza la URL usando el mismo algoritmo compatible con WHATWG que usan los navegadores y muestra cada componente en una tabla clara y copiable.

Análisis instantáneo en tu navegador
Pega cualquier URL y ve todos sus componentes desglosados de inmediato. Sin recargar la página, sin llamadas al servidor, sin esperas.
🔒
Tus URLs permanecen privadas
El análisis se ejecuta completamente en tu navegador usando la API URL nativa. La URL que introduces nunca sale de tu dispositivo.
🔍
Inspecciona cada detalle
Ve el protocolo, hostname, puerto, pathname, cadena de consulta, fragmento hash y cada parámetro de consulta individual con su valor decodificado.
📋
Copia componentes individuales
Haz clic en el botón de copiar junto a cualquier campo para obtener el valor exacto. No es necesario seleccionar y recortar subcadenas manualmente.

Casos de uso del analizador de URL

Depuración de enrutamiento frontend
Comprueba que los segmentos de ruta y los fragmentos hash coinciden con tu configuración de enrutador. Detecta barras mal colocadas o parámetros de consulta inesperados antes de que provoquen errores 404.
Validación de endpoints de API backend
Verifica que las URLs de solicitudes entrantes contienen el hostname, puerto y estructura de ruta correctos antes de escribir manejadores de rutas o middleware.
Prueba de reglas de redirección en DevOps
Al escribir reglas de redirección para Nginx, Apache o CDN, analiza las URLs de origen y destino para confirmar que cada componente se mapea correctamente.
Verificación de enlaces en QA
Analiza URLs de informes de pruebas o tickets de errores para aislar qué parámetro de consulta o fragmento está causando que se cargue la página incorrecta.
Extracción de URLs en pipelines de datos
Extrae hostnames o segmentos de ruta de URLs en archivos de log o datos de analítica para generar informes a nivel de dominio o filtrar tráfico por endpoint.
Aprender la estructura de URLs
Los estudiantes y desarrolladores nuevos en protocolos web pueden pegar URLs reales y ver de inmediato qué delimitador marca cada límite.

Referencia de componentes de URL

La tabla muestra cada propiedad devuelta por el constructor URL de JavaScript al analizar una URL. Los mismos componentes existen en el resultado urlparse de Python, la estructura url.URL de Go y la salida de parse_url de PHP, aunque los nombres de las propiedades difieren entre lenguajes.

PropiedadEjemploDescripción
protocolhttps:Scheme including the trailing colon
hostnameapi.example.comDomain name or IP address
port8080Port number (empty string if default)
pathname/v1/usersPath starting with /
search?page=2&limit=10Query string including the leading ?
hash#sectionFragment identifier including the leading #
originhttps://api.example.com:8080protocol + hostname + port
hostapi.example.com:8080hostname + port
usernameadminCredentials before @ (rarely used in practice)
passwordsecretCredentials before @ (avoid in production URLs)
href(full URL)The complete, serialized URL string

Estándar URL WHATWG vs RFC 3986

Dos especificaciones definen cómo deben analizarse las URLs. Coinciden en la estructura básica pero divergen en casos límite — y esa divergencia suele ser la causa cuando tu navegador maneja una URL de forma diferente a tu servidor.

WHATWG URL Standard
Usado por todos los navegadores modernos y el constructor URL de JavaScript. Acepta y normaliza entradas descuidadas: esquemas ausentes, barras invertidas como separadores de ruta, nombres de dominio internacionales mediante Punycode. Definido como estándar vivo en url.spec.whatwg.org.
RFC 3986
La especificación formal de IETF (2005). Más estricta que WHATWG: rechaza algunas entradas que los navegadores aceptan. Usada por muchas bibliotecas del lado del servidor, incluyendo net/url de Go y urllib.parse de Python. Definida en RFC 3986.

En la práctica, la mayoría de las diferencias aparecen al analizar URLs con nombres de dominio internacionales (IDN), esquemas ausentes o caracteres inusuales. El analizador WHATWG convierte automáticamente los hostnames IDN a Punycode, mientras que los analizadores estrictos de RFC 3986 pueden rechazarlos. Si pegas una URL en esta herramienta y ves resultados distintos a los que produce tu código del lado del servidor, la diferencia entre WHATWG y RFC es la causa más probable.

Ejemplos de código

Todos los lenguajes principales tienen un analizador de URL integrado. Los ejemplos a continuación analizan la misma URL y extraen sus componentes. Observa las pequeñas diferencias de nomenclatura entre lenguajes: Python usa scheme en lugar de protocol, y Go expone RawQuery en lugar de search.

JavaScript (browser / Node.js)
const url = new URL('https://api.example.com:8080/v1/users?page=2&limit=10#section')

url.protocol  // → "https:"
url.hostname  // → "api.example.com"
url.port      // → "8080"
url.pathname  // → "/v1/users"
url.search    // → "?page=2&limit=10"
url.hash      // → "#section"

// Iterate over query parameters
for (const [key, value] of url.searchParams) {
  console.log(`${key} = ${value}`)
}
// → "page = 2"
// → "limit = 10"

// Modify and re-serialize
url.searchParams.set('page', '3')
url.toString()
// → "https://api.example.com:8080/v1/users?page=3&limit=10#section"
Python
from urllib.parse import urlparse, parse_qs

result = urlparse('https://api.example.com:8080/v1/users?page=2&limit=10#section')

result.scheme    # → 'https'
result.hostname  # → 'api.example.com'
result.port      # → 8080
result.path      # → '/v1/users'
result.query     # → 'page=2&limit=10'
result.fragment  # → 'section'

# Parse query string into a dict
params = parse_qs(result.query)
params['page']   # → ['2']
params['limit']  # → ['10']

# Reconstruct with modifications
from urllib.parse import urlencode, urlunparse
new_query = urlencode({'page': '3', 'limit': '10'})
urlunparse(result._replace(query=new_query))
# → 'https://api.example.com:8080/v1/users?page=3&limit=10#section'
Go
package main

import (
	"fmt"
	"net/url"
)

func main() {
	u, err := url.Parse("https://api.example.com:8080/v1/users?page=2&limit=10#section")
	if err != nil {
		panic(err)
	}

	fmt.Println(u.Scheme)   // → "https"
	fmt.Println(u.Hostname()) // → "api.example.com"
	fmt.Println(u.Port())     // → "8080"
	fmt.Println(u.Path)       // → "/v1/users"
	fmt.Println(u.RawQuery)   // → "page=2&limit=10"
	fmt.Println(u.Fragment)   // → "section"

	// Query params as map
	q := u.Query()
	fmt.Println(q.Get("page"))  // → "2"
	fmt.Println(q.Get("limit")) // → "10"
}
PHP
<?php
$url = 'https://api.example.com:8080/v1/users?page=2&limit=10#section';
$parts = parse_url($url);

$parts['scheme'];   // → "https"
$parts['host'];     // → "api.example.com"
$parts['port'];     // → 8080
$parts['path'];     // → "/v1/users"
$parts['query'];    // → "page=2&limit=10"
$parts['fragment']; // → "section"

// Parse query string into an array
parse_str($parts['query'], $params);
$params['page'];    // → "2"
$params['limit'];   // → "10"

Preguntas frecuentes

¿Cuál es la diferencia entre una URL y una URI?
Una URL (Localizador de Recursos Uniforme) es un tipo específico de URI (Identificador de Recursos Uniforme) que incluye tanto el identificador como el mecanismo de acceso (el esquema, como https://). Todas las URLs son URIs, pero no todos los URIs son URLs. Un URN como urn:isbn:0451450523 es un URI que identifica un recurso por nombre sin especificar cómo recuperarlo. En el desarrollo web, los términos se usan con frecuencia de forma intercambiable porque casi todos los URIs que encuentras son URLs.
¿Cómo maneja el constructor URL las URLs relativas?
El constructor URL de JavaScript requiere una URL base al analizar rutas relativas. Llamar a new URL('/path?q=1') lanza un TypeError. Debes proporcionar una base: new URL('/path?q=1', 'https://example.com'). urljoin de Python y url.ResolveReference de Go cumplen la misma función. Esta herramienta espera URLs completas y absolutas con un esquema.
¿Qué ocurre cuando una URL no tiene número de puerto?
Cuando se omite el puerto, el analizador devuelve una cadena vacía para la propiedad port. El navegador asume el puerto predeterminado para el esquema: 443 para https, 80 para http, 21 para ftp. Puedes acceder al puerto efectivo mediante la propiedad origin o host, pero el campo port permanece vacío porque no se especificó ningún puerto explícito.
¿Puede una URL contener caracteres Unicode?
Sí, pero deben estar codificados para su transmisión. El Estándar de URL WHATWG lo maneja automáticamente: los nombres de dominio internacionales se convierten a Punycode (prefijo xn--), y los caracteres de ruta y consulta fuera del rango ASCII se codifican por porcentaje. Si pegas una URL con Unicode en esta herramienta, verás la versión normalizada y segura en ASCII en la salida analizada.
¿Cuál es la longitud máxima de una URL?
Ningún estándar define una longitud máxima de URL — RFC 3986 no se pronuncia sobre el tema. En la práctica, los navegadores imponen límites: Chrome admite hasta aproximadamente 2 MB en la barra de direcciones, mientras que Internet Explorer (obsoleto) tenía un límite de 2.083 caracteres. La mayoría de los servidores web tienen por defecto 8 KB (Nginx) o 8 KB (Apache) para la línea de solicitud. Si necesitas transmitir datos grandes, usa el cuerpo de una solicitud POST en lugar de cadenas de consulta.
¿Cómo analizo solo la cadena de consulta sin la URL completa?
En JavaScript, usa new URLSearchParams('page=2&limit=10') para analizar una cadena de consulta sin procesar. En Python, usa urllib.parse.parse_qs('page=2&limit=10'). Ambos devuelven los parámetros como pares clave-valor. Esto es útil cuando tienes la cadena de consulta de forma aislada, por ejemplo de un envío de formulario o una entrada de log que solo capturó la parte de la consulta.
¿El análisis de URL es lo mismo que la decodificación de URL?
No. El análisis de URL divide una URL en componentes estructurales (esquema, host, ruta, consulta, fragmento). La decodificación de URL convierte los caracteres codificados por porcentaje de vuelta a su forma original (%20 se convierte en espacio, %26 en &). Las dos operaciones son complementarias: normalmente primero analizas la URL y luego decodificas los valores de los componentes individuales. Decodificar antes de analizar puede romper la estructura de la URL porque los delimitadores decodificados como & y = serían malinterpretados.