Analice una cadena User-Agent: navegador, SO y dispositivo
La cabecera User-Agent es compacta, pero resulta difícil de interpretar porque los fabricantes combinan identificadores de producto, marcas de compatibilidad, pistas del sistema operativo y datos del dispositivo en una sola línea.
Ejecutar — gratis
Este analizador la convierte en un resultado predecible con el nombre y la versión del navegador, el sistema operativo y su versión, y una categoría práctica de dispositivo. Emplea reglas transparentes y deterministas, por lo que una misma entrada siempre genera la misma salida, sin consultas de red, aleatoriedad, toma de huellas ni enriquecimiento oculto.
Proporcione la cabecera completa siempre que sea posible
Pegue el valor de la cabecera HTTP User-Agent en el campo user_agent e incluya todos los identificadores de producto y la sección de plataforma entre paréntesis. Las cadenas completas aportan pruebas suficientes para distinguir navegadores que comparten tecnología de renderizado. Por ejemplo, las cadenas actuales de Edge, Opera, Samsung Internet y Chrome pueden contener el identificador Chrome; por eso, el analizador busca primero los identificadores más específicos y solo después acepta la coincidencia genérica de Chrome. El orden también importa para Firefox y Chrome en iOS, cuyas cadenas difieren de las versiones de escritorio debido a los requisitos de la plataforma de Apple. Se ignoran los espacios al principio y al final, pero una cadena vacía o formada solo por espacios se rechaza como entrada no válida, porque no existe nada que clasificar. El analizador no contacta con el dispositivo, no consulta la dirección IP, no inspecciona Client Hints ni combina la cadena con otros identificadores. Si necesita versiones, proporcione la cabecera original en lugar de una etiqueta abreviada. Una cadena recortada o desconocida puede aceptarse, pero los campos sin pruebas reconocibles se devuelven como Desconocido y con versión nula, sin inventar datos.
Comprenda las reglas del navegador y del sistema operativo
La detección sigue una tabla de prioridad fija basada en identificadores habituales de User-Agent. Los identificadores específicos Edg, OPR, SamsungBrowser, CriOS y FxiOS se evalúan antes que los patrones generales de Chrome, Firefox y Safari. Así se evita clasificar erróneamente un navegador basado en Chromium solo porque su cabecera incluye Chrome por compatibilidad. Para Safari se utiliza Version, ya que el identificador Safari independiente describe la familia del producto y no la versión pública del navegador. El sistema operativo se analiza de forma similar: Windows Phone se comprueba antes que Windows de escritorio, Android antes que Linux genérico e iOS antes que los fragmentos de compatibilidad de macOS. Los guiones bajos de las versiones de Apple se convierten en puntos. Los valores Windows NT se asocian a versiones conocidas cuando existe una equivalencia convencional fiable; Windows NT 10.0 se muestra deliberadamente como «10 o 11», porque la cabecera tradicional no permite diferenciarlos con fiabilidad. Son reglas conocidas, no afirmaciones probabilísticas. Los productos nuevos, cadenas reducidas por privacidad, vistas web integradas y variantes de fabricantes pueden producir Desconocido o una familia general hasta que exista una señal identificable. Esta prudencia resulta más segura que inventar precisión.
Use el tipo de dispositivo como categoría práctica, no como identidad
El resultado device_type es una categoría operativa amplia: escritorio, móvil, tableta, bot o desconocido. Los indicadores de tableta se evalúan antes que los indicadores móviles generales porque muchas tabletas Android incluyen Android, pero omiten deliberadamente Mobile. Los teléfonos reconocidos, iPhone, iPod, Windows Phone y otros identificadores móviles se clasifican como móvil. Los términos habituales de rastreadores producen bot, algo útil para resumir registros, aunque no sustituye controles de abuso por capas ni la autenticación de rastreadores verificados. Un sistema operativo o navegador de escritorio reconocible se clasifica de forma predeterminada como escritorio; una cadena sin pruebas conocidas del navegador ni del sistema devuelve desconocido. Estas categorías describen lo que el emisor declara, no un dispositivo físico verificado. Las cadenas User-Agent pueden modificarse, los clientes automatizados pueden imitar navegadores y las funciones modernas de privacidad reducen los detalles deliberadamente. Use el resultado para informes, enriquecimiento de registros, pistas de compatibilidad o una experiencia inicial razonable. No lo use como límite de seguridad, huella única ni prueba de propiedad. Cuando una decisión afecte al acceso, los pagos o el fraude, aplique autorización en el servidor y señales de riesgo específicas.
Qué puede hacer con ella
Enriquecer registros de solicitudes
Convierta cabeceras sin procesar en columnas coherentes de navegador, sistema y dispositivo para facilitar los informes operativos.
Resumir el tráfico
Agrupe visitas en categorías generales de navegador y dispositivo sin enviar la cabecera a un servicio externo.
Elegir valores de compatibilidad
Seleccione una interfaz inicial o un aviso de soporte razonable y mantenga la detección de funciones como autoridad definitiva.
Preguntas frecuentes
¿Cuánto cuesta un análisis?
Cada solicitud de API cuesta $0.002. La versión determinista del navegador también puede ejecutarse localmente en la página.
¿Por qué Windows aparece como 10 o 11?
Las cadenas User-Agent tradicionales suelen indicar Windows NT 10.0 para ambos, por lo que la cabecera no permite distinguirlos de forma fiable.
¿Se puede confiar en User-Agent para decisiones de seguridad?
No. Los clientes pueden cambiar o imitar la cabecera. Trate el resultado como metadatos descriptivos, no como identidad verificada ni autorización.
¿Qué ocurre si no se reconoce un navegador?
El navegador se devuelve como Desconocido y su versión como nula. Las pistas reconocibles del sistema o del dispositivo se siguen mostrando.
¿El análisis consulta un servicio externo?
No. Utiliza reglas locales y deterministas, sin peticiones de red, toma de huellas ni enriquecimiento por IP.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/user-agent-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}'const res = await fetch("https://api.kit.forhosting.com/web/user-agent-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/user-agent-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/user-agent-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/user-agent-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.user_agent_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |