¿Qué es localhost? 127.0.0.1 explicado

Publicado:

15 min de lectura

Acar Diveroli
Autor: Acar Diveroli
Comando > ping localhost con cursor azul, una línea en bucle que vuelve al inicio, respuestas de ::1 y una insignia LOOPBACK

Inicias un proyecto y la terminal muestra Local: http://localhost:5173. Un tutorial te pide abrir localhost:3000. O abres la lista de dispositivos de tu router Wi-Fi y uno se llama «localhost». En cuanto te fijas, la palabra aparece por todas partes, y siempre significa lo mismo: este dispositivo, hablando consigo mismo.

En este artículo explicamos qué es localhost, qué relación tiene con 127.0.0.1 y ::1 y qué pasa cuando lo abres. Después vemos el número que va tras los dos puntos, en qué se diferencia localhost de 0.0.0.0 y de tu dirección IP, quién puede llegar a él, qué muestra ping localhost en Windows y por qué el tráfico local no debería pasar por un proxy.

¿Qué es localhost?

Localhost es un nombre de host reservado que siempre significa «el dispositivo en el que estoy funcionando». Cuando un navegador, un script o cualquier otro programa se conecta a localhost, la conexión va de un programa de tu ordenador a otro programa del mismo ordenador.

El nombre está protegido por un estándar. El RFC 6761 (2013) incluye localhost entre los nombres de dominio de uso especial: el software de resolución de nombres debe responderlo siempre con una dirección de loopback sin preguntar a un servidor DNS, y los registros de dominios no pueden asignarlo. La regla cubre también los nombres que terminan en .localhost, como app.localhost.

Cada dispositivo tiene su propio localhost: en tu portátil es el portátil; en tu teléfono, el teléfono. Ese único dato explica la mayor parte de las confusiones con localhost, desde «funciona en mi ordenador pero no en mi teléfono» hasta «mi compañero no puede abrir mi enlace».

¿Qué son 127.0.0.1 y ::1?

127.0.0.1 y ::1 son las direcciones de loopback a las que apunta localhost, la primera en IPv4 y la segunda en IPv6. Una dirección de loopback envía el tráfico a una interfaz de red virtual, la interfaz de loopback, que lo devuelve directamente al mismo dispositivo.

IPv4 reserva un bloque entero para esto. El RFC 1122, el documento de requisitos para hosts de 1989, reservó toda dirección que empieza por 127 como «dirección de loopback interna del host», que no debe aparecer fuera de un host. El registro de direcciones de uso especial del RFC 6890 sigue listando 127.0.0.0/8 como «Loopback» y lo marca como no reenviable y no global: los routers nunca lo pasan a otra red.

El bloque va de 127.0.0.0 a 127.255.255.255, unos 16,7 millones de direcciones, y todas vuelven al propio dispositivo: en nuestro equipo de prueba con Windows 11, ping 127.45.6.7 respondió igual que 127.0.0.1. IPv6 tiene una sola dirección de loopback, ::1; el RFC 4291 exige descartar un paquete dirigido a ella si alguna vez llega desde una red.

¿Qué recorrido hace una solicitud a localhost?

Una solicitud a localhost pasa por los mismos pasos que cualquier solicitud web, pero cada paso ocurre dentro de tu dispositivo. Esto es lo que pasa cuando escribes localhost:3000 en el navegador:

  1. El navegador pide la dirección. El sistema operativo tiene que resolver localhost, igual que haría con example.com.
  2. El sistema responde sin preguntar a la red. Los resolutores reconocen localhost por sí mismos, y Linux y macOS guardan además una línea como 127.0.0.1 localhost en el archivo hosts, el pequeño archivo de texto que asigna nombres a direcciones antes de consultar el DNS (dónde está el archivo hosts y cómo editarlo). En nuestra prueba con curl en Windows 11, localhost se resolvió tanto a ::1 como a 127.0.0.1.
  3. El paquete va a la interfaz de loopback. En lugar del adaptador Wi-Fi o Ethernet, el sistema lo entrega a una interfaz virtual sin cable detrás. Nada llega a tu router.
  4. El sistema busca un programa en el puerto 3000. Si hay un programa escuchando ahí, recibe la solicitud. Si no lo hay, el sistema rechaza la conexión al instante.
  5. La respuesta vuelve por el mismo camino, sin salir de la máquina.

Como el nombre da dos direcciones, un cliente puede probar primero ::1 y luego pasar a 127.0.0.1; nuestro curl hizo exactamente eso cuando el servidor de prueba escuchaba solo en 127.0.0.1. Un cliente que no hace ese cambio recibe un rechazo aunque el servidor esté funcionando.

¿Qué significa localhost:3000?

localhost:3000 significa «el programa de este dispositivo que escucha en el puerto 3000». Un puerto es un número de 0 a 65.535 que indica al sistema qué programa debe recibir una conexión: la dirección IP encuentra el dispositivo y el puerto encuentra el programa dentro de él.

Los números más buscados son los puertos predeterminados de herramientas de desarrollo muy usadas:

  • 3000: el puerto predeterminado de next dev en Next.js y una elección habitual en los tutoriales de Node.js.
  • 5173: el puerto predeterminado del servidor de desarrollo de Vite.
  • 8000: el puerto predeterminado del servidor web integrado de Python, python -m http.server.
  • 8080: el puerto alternativo registrado para el tráfico web, que usan muchos servidores locales y proxies.

Si no has iniciado nada, no hay nada escuchando ahí y la página no carga. Por qué el 8080 sirve tanto a proxies como a servidores de desarrollo, y cómo encontrar el programa que ocupa un puerto, lo explicamos en ¿Qué es el puerto 8080?

El puerto también importa para las reglas de seguridad del navegador. Dos direcciones que solo se diferencian en el puerto son orígenes distintos, así que una página en localhost:5173 que llama a una API en localhost:3000 hace una solicitud entre orígenes, que la API tiene que permitir con cabeceras CORS.

Diferencias entre localhost, 127.0.0.1, 0.0.0.0 y tu dirección IP

En una terminal estas direcciones se parecen, pero llegan a públicos muy distintos:

DirecciónQué significaQuién puede llegar a ella
localhostUn nombre para este dispositivoSolo este dispositivo
127.0.0.1La dirección de loopback de IPv4Solo este dispositivo
::1La dirección de loopback de IPv6Solo este dispositivo
0.0.0.0Para un servidor: todas las direcciones de este dispositivoTambién otros dispositivos, si el firewall lo permite
192.168.1.20 (ejemplo)La dirección de este dispositivo en la red de casaLos dispositivos de la misma red
IP públicaLa dirección de tu router en internetInternet, solo si el router reenvía un puerto

0.0.0.0 es un ajuste de escucha, no un destino: un servidor vinculado a ella acepta conexiones en todas las direcciones que tiene el dispositivo. El servidor de desarrollo de Next.js y el servidor integrado de Python escuchan en todas las direcciones de forma predeterminada, mientras que Vite se queda en localhost salvo que añadas --host.

¿Por qué localhost rechaza la conexión?

«La página localhost ha rechazado la conexión» significa que el navegador llegó a tu propio ordenador, pero ningún programa aceptó la conexión en ese puerto. En Chrome en español, la página dice «No se puede acceder a este sitio web», después «La página localhost ha rechazado la conexión.» y el código ERR_CONNECTION_REFUSED.

Normalmente el servidor de desarrollo no está en marcha, funciona en otro puerto o escucha en la otra dirección de loopback. Las comprobaciones para cada caso están en Cómo solucionar err_connection_refused.

¿Por qué los navegadores tratan localhost como contexto seguro?

Como el tráfico a una dirección de loopback nunca sale del dispositivo, los navegadores tratan http://localhost como una página HTTPS aunque no tenga certificado. Un contexto seguro (secure context) es una página en la que el navegador confía lo suficiente como para activar funciones sensibles, como los service workers, la geolocalización o el acceso a la cámara mediante getUserMedia().

La guía de MDN sobre contextos seguros enumera los hosts que reciben este trato: localhost, los nombres que terminan en .localhost, el bloque 127.0.0.0/8 y ::1. En nuestra prueba con Chromium 145, window.isSecureContext devolvió true tanto en http://localhost:3000 como en http://127.0.0.1:3000.

La excepción termina en el propio dispositivo. La misma aplicación abierta con http:// simple desde tu teléfono, a través de la dirección del ordenador en la red de casa, no es un contexto seguro, así que una función que va bien en localhost puede fallar ahí.

¿Es seguro localhost y pueden otros acceder a él?

Nadie en tu red ni en internet puede conectarse a tu 127.0.0.1 o a tu ::1: los routers no reenvían esas direcciones y, en cualquier otro dispositivo, significan ese otro dispositivo. A un programa que escucha solo en localhost solo puede llegar el software de tu propio ordenador.

Los riesgos están en otros tres lugares:

  • Programas que escuchan en todas las direcciones. Un servidor vinculado a 0.0.0.0 es accesible desde tu red de casa, y desde internet si el router reenvía su puerto. El servidor integrado de Python funciona así salvo que añadas --bind 127.0.0.1.
  • Las webs que visitas. Los scripts de una página se ejecutan en tu navegador y pueden intentar enviar solicitudes a localhost. Las versiones recientes de Chrome te piden permiso antes, y CORS impide que una página lea una respuesta local salvo que el programa local lo permita.
  • El software que ya está en tu ordenador. Cualquier programa de la máquina, incluido el malware, puede hablar con localhost, así que protege con contraseña las bases de datos locales y los paneles de administración.

¿Cómo hacer ping a localhost?

Abre el Símbolo del sistema o PowerShell en Windows, o Terminal en macOS o Linux, y escribe:

bash
ping localhost

Esta es la salida de nuestro equipo de prueba con Windows 11; hemos sustituido el nombre del ordenador por MY-PC. El idioma de las líneas depende del idioma de tu Windows; las direcciones y los tiempos son los mismos:

text
Pinging MY-PC [::1] with 32 bytes of data:
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms

Ping statistics for ::1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

Windows escribe en la primera línea el nombre del propio ordenador en lugar de la palabra localhost. Las respuestas llegan desde ::1 porque Windows usó primero IPv6; ping -4 localhost fuerza IPv4 y responde desde 127.0.0.1. Todos los tiempos están por debajo de un milisegundo, porque los paquetes nunca salieron de la máquina.

En macOS y Linux, ping sigue hasta que pulsas Ctrl+C; ping -c 4 localhost se detiene tras cuatro respuestas. Si ping localhost falla, el problema está en el propio ordenador, por ejemplo en un archivo hosts que apunta localhost a otra dirección, y no en el router ni en tu proveedor.

Localhost y proxies: por qué el tráfico local no debe pasar por el proxy

Un proxy en internet no puede llegar a tu localhost, porque para el servidor proxy localhost es el propio servidor proxy. Por eso los ajustes de proxy tienen excepciones para las direcciones locales.

En Windows, en Configuración > Red e Internet > Proxy, la configuración manual del proxy tiene la casilla No usar el servidor proxy para direcciones locales (intranet), que Microsoft recomienda dejar activada, y una lista de excepciones donde puedes añadir localhost y 127.0.0.1. Chrome nunca envía localhost ni las direcciones de loopback a través de un proxy, salvo que se inicie con una regla de omisión especial.

Las herramientas de línea de comandos pueden no hacerlo por ti. En nuestra prueba con curl 8.22.0, definir la variable http_proxy hizo que una solicitud a http://localhost:3000 fuera al proxy, donde agotó el tiempo de espera; al añadir NO_PROXY=localhost,127.0.0.1,::1, fue directamente al programa local, como describe la documentación de curl sobre las variables de entorno del proxy.

Localhost también aparece en el otro lado: los proxies de depuración se ejecutan en tu propio ordenador en una dirección como 127.0.0.1:8080, y el ajuste de proxy del navegador apunta ahí. Cuando tus scripts envían su tráfico externo a través de un servicio remoto como los Proxies residenciales, deja los nombres locales en NO_PROXY para que las llamadas a tu propia API se queden en la máquina.

Dónde te encuentras con localhost

  • Desarrollo web. Los servidores de desarrollo muestran una dirección localhost al arrancar, y pruebas el sitio ahí primero.
  • Bases de datos y herramientas de administración locales. Una base de datos instalada para tu propio uso puede escuchar solo en 127.0.0.1, fuera del alcance de otras máquinas.
  • Inicio de sesión desde aplicaciones de escritorio. Algunas aplicaciones terminan un inicio de sesión enviando tu navegador a una dirección como http://127.0.0.1:51004/..., donde escucha la propia aplicación; el RFC 8252 describe este patrón para OAuth.
  • La lista de dispositivos de tu router. Un dispositivo que no comunica un nombre propio puede aparecer ahí como «localhost».

Errores frecuentes

  • Abrir localhost en el teléfono para llegar al ordenador. En el teléfono, localhost es el teléfono; usa la dirección del ordenador en la red de casa.
  • Compartir un enlace de localhost. http://localhost:3000 enviado a un compañero abre su ordenador, no el tuyo.
  • Escuchar en 0.0.0.0 cuando solo tú necesitas la aplicación. Vincúlala a 127.0.0.1 salvo que otro dispositivo tenga que acceder a ella.
  • Enviar el tráfico local a través de un proxy remoto. Sin una excepción, la solicitud va al proxy, que no puede ver tu máquina.
  • Apuntar localhost a otra dirección en el archivo hosts. Los programas esperan que sea la dirección de loopback y fallan de formas extrañas cuando no lo es.

Guía de decisión

Lo que necesitasQué hacer
Abrir un proyecto que acabas de iniciarUsa la dirección que muestra el servidor de desarrollo
«La página localhost ha rechazado la conexión»Inicia el servidor, comprueba el puerto y prueba 127.0.0.1 con el mismo puerto
Probar el sitio desde tu teléfonoHaz que el servidor escuche en la red y abre la IP local del ordenador
Mantener privada una herramienta localVincúlala a 127.0.0.1 y protégela con contraseña
Comprobar el software de red del propio ordenadorEjecuta ping localhost
Usar un proxy en scripts sin romper las llamadas localesPon localhost,127.0.0.1,::1 en NO_PROXY

Preguntas frecuentes

¿Qué es localhost:3000?

Es el programa que escucha en el puerto 3000 de tu propio dispositivo, casi siempre un servidor de desarrollo. Next.js usa el puerto 3000 de forma predeterminada, así que la dirección suele aparecer después de ejecutar un comando de inicio. Si no hay nada funcionando en ese puerto, el navegador muestra «La página localhost ha rechazado la conexión.»

¿Localhost es lo mismo que mi dirección IP?

No. Localhost es la dirección de loopback, 127.0.0.1 o ::1, que solo tu dispositivo puede usar y que es la misma en todos los dispositivos. Tu dirección en la red de casa, como 192.168.1.20, permite que otros dispositivos lleguen a ti, y tu IP pública es la que ven las webs.

¿Puede una web acceder a mi localhost?

Desde su propio servidor, no, pero la página que abres ejecuta scripts en tu navegador, y esos scripts pueden intentarlo. Desde la versión 142, Chrome te pide permiso antes de que una web pública llegue a direcciones de la red local o de loopback (anuncio de Chrome sobre Local Network Access).

¿Por qué mi router muestra un dispositivo llamado localhost?

El router muestra cada dispositivo con el nombre que este envía cuando pide una dirección por DHCP. Algunos dispositivos nunca reciben un nombre propio y envían uno predeterminado, y en muchos sistemas basados en Linux ese nombre predeterminado es localhost. Es un dispositivo real de tu red, no la dirección de loopback de tu ordenador; compara su dirección MAC con las de tus dispositivos y cambia la contraseña del Wi-Fi si no consigues identificarlo.

¿Cómo abro localhost desde mi teléfono?

No con la palabra localhost, porque en el teléfono significa el teléfono. Conéctate a la misma red Wi-Fi, inicia el servidor de desarrollo para que escuche en la red (Vite necesita --host) y abre la dirección del ordenador en la red de casa con el puerto, por ejemplo http://192.168.1.20:5173. El firewall del ordenador tiene que permitirlo.

¿Funciona localhost sin conexión a internet?

Sí. El tráfico de localhost nunca sale del dispositivo, así que un servidor local, una base de datos local y ping localhost funcionan con el Wi-Fi apagado.

En resumen

Localhost es el nombre que cada dispositivo usa para sí mismo, respaldado por las direcciones de loopback 127.0.0.1 y ::1, y el tráfico que se envía allí da la vuelta dentro de la máquina. El número de puerto elige el programa, así que localhost:3000 abre tu servidor de desarrollo. Otros dispositivos no pueden llegar a localhost; los riesgos reales son los programas que escuchan en todas las direcciones y las solicitudes locales enviadas a un proxy remoto. Si tus scripts envían el tráfico externo a través de proxies, deja localhost en las excepciones y compara las opciones en nuestra página de productos proxy.