Analiza cualquier URL en protocolo, host, puerto, ruta, consulta y fragmento con el estándar WHATWG URL. Los parámetros se decodifican en una tabla legible.
Divide una URL en todos los componentes que ve el navegador. Pega una URL y cada parte se extrae con el mismo analizador WHATWG que usa tu navegador, así que el resultado coincide exactamente con cómo se interpretará. Los parámetros de consulta se decodifican en una tabla.
La mayoría de las URLs usan solo unos pocos de esos huecos, pero la gramática siempre los permite todos. Leer una URL consiste sobre todo en saber dónde termina un componente y empieza el siguiente, algo que deciden los delimitadores ://, @, :, /, ? y #.
Componente a componente
Protocolo (esquema) indica cómo obtener el recurso: https:, mailto:, ftp:. Ojo: el analizador WHATWG incluye los dos puntos finales en este valor, lo que sorprende a quien lo compara con la cadena "https".
Usuario y contraseña son la sección userinfo, ya obsoleta. Los navegadores todavía la analizan, pero la eliminan de las peticiones y suelen avisar, porque incrustar credenciales en una URL las filtra al historial, los registros y las cabeceras referrer. Si aparecen en una URL que no escribiste tú, trátalo como señal de phishing.
Nombre de host es solo el dominio o la IP. Host es el nombre de host más el puerto cuando hay uno no predeterminado, y por eso ambos campos a menudo se ven idénticos.
Puerto queda vacío cuando la URL usa el predeterminado del esquema: 443 para https, 80 para http. El analizador normaliza esto: ejemplo.com:443/ informa de un puerto vacío porque 443 no aporta información.
Ruta es todo desde la primera / hasta la consulta. Es el único componente que nunca está vacío en una URL http(s); un origen a secas recibe una ruta de /.
Cadena de consulta empieza en ? y lleva los parámetros. Fragmento empieza en # y es la única parte que nunca se envía al servidor: se gestiona íntegramente en el cliente, por eso las SPA lo usaron para enrutar y por eso un token en el fragmento no acaba en los registros del servidor.
Origen es el trío relevante para la seguridad: esquema, host y puerto. Dos URLs comparten origen solo si coinciden los tres, y en eso se basan exactamente la política del mismo origen y las decisiones de CORS.
Por qué el analizador es estricto
El analizador WHATWG solo acepta URLs absolutas. ejemplo.com/pagina no tiene esquema, así que no puede analizarse por sí sola: el analizador no puede saber si querías decir ejemplo.com/pagina o una ruta relativa. El código real resuelve referencias relativas contra una URL base; esta herramienta exige la forma absoluta a propósito para que lo que veas no sea ambiguo.
Normalización que notarás
El analizador no devuelve la cadena en bruto. Pasa el esquema y el host a minúsculas, resuelve los segmentos . y .. de la ruta, descarta los puertos predeterminados y convierte los nombres de dominio internacionalizados a Punycode, de modo que münchen.de informa de un host xn--mnchen-3ya.de. Es una ventaja: te muestra la URL tal como la tratará la pila de red, no como se escribió.
Parámetros repetidos
Una cadena de consulta puede repetir legítimamente una clave, como en ?tag=a&tag=b. Ninguna especificación dice qué significa eso: unos frameworks toman el primer valor, otros el último y otros construyen un array. La tabla lista cada aparición en orden para que veas exactamente qué se envió, en vez de una vista ya colapsada.
Preguntas frecuentes
¿Por qué el campo de puerto está vacío?
Porque la URL usa el puerto predeterminado de su esquema. El analizador WHATWG omite el 443 en https y el 80 en http, ya que incluirlos no aporta nada y rompería las comparaciones de origen.
¿Por qué el protocolo lleva dos puntos?
Es lo que define el estándar de URL. La propiedad protocol es 'https:' y no 'https'. Si comparas con el nombre del esquema a secas, ten en cuenta los dos puntos finales.
¿Qué diferencia hay entre host y hostname?
Hostname es solo el dominio. Host incluye el puerto si lo hay. Para https://ejemplo.com:8443/ el hostname es ejemplo.com y el host es ejemplo.com:8443.
¿Por qué no puedo analizar una URL relativa?
Una referencia relativa como /about o ../img.png solo tiene sentido respecto a una URL base. El analizador exige una URL absoluta con esquema para que el resultado no sea ambiguo.
¿Se envía el fragmento al servidor?
No. La parte posterior a # nunca se transmite en una petición HTTP. Se resuelve íntegramente en el navegador, por eso los flujos implícitos de OAuth lo usaban para mantener los tokens fuera de los registros.
¿Por qué cambió mi dominio Unicode?
Los nombres de dominio internacionalizados se convierten a Punycode, la forma ASCII que usa realmente el DNS. münchen.de pasa a ser xn--mnchen-3ya.de. Es la misma transformación que hace tu navegador antes de la petición.