¿Por qué los navegadores no pueden resolver localhost?

2

Tengo un programa en mi máquina que escucha en el puerto 8080 para responder a las solicitudes HTTP. Pero cuando intento ir a http://localhost:8080/ en un navegador ...

Chrome dice:

  

La página localhost no funciona

     

localhost no envió ningún dato. ERR_EMPTY_RESPONSE

Firefox redirige la solicitud a www.localhost.com:8080 que, por supuesto, no es correcta. Mi investigación sugiere que está haciendo esto porque no puede encontrar el host local.

Safari dice que no puede abrir la página porque "el servidor interrumpió la conexión inesperadamente"

Sin embargo, si voy a http://127.0.0.1:8080 la página se carga correctamente.

Por lo tanto, parece que, por alguna razón, OS X no está resolviendo correctamente localhost a 127.0.0.1. Si trato de ping localhost desde la línea de comandos, funciona, pero mi entendimiento es que la resolución de nombres funciona de manera diferente en diferentes lugares.

He leído varios problemas donde localhost no se resuelve, por ejemplo. De ping, pero no estoy teniendo ese problema. Todos los casos en los que localhost no funcionaba en el navegador parecen no tener soluciones relacionadas con el problema real que tengo. También he visto lugares donde la gente ha mencionado que localhost funciona en el navegador, así que me pregunto qué estoy haciendo mal aquí.

De los comentarios
Si intento la dirección IPv6 para localhost http://[::1]:8080/ , obtengo los mismos errores que con el uso de localhost.

    
pregunta Michael 18.01.2017 - 20:23

3 respuestas

4

Primero verifique la resolución de nombres con el sistema de resolución del sistema:

dscacheutil -q host -a name localhost

Si obtienes una salida como:

name: localhost
ipv6_address: ::1

name: localhost
ip_address: 127.0.0.1

el sistema de resolución del sistema funciona correctamente.

Detenga su aplicación node.js, cree un servidor node.js simple usando este archivo con un nombre arbitrario (por ejemplo, multiserver.js):

var http = require('http');
function handler(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
};
http.createServer(handler).listen(3000, '127.0.0.1');
http.createServer(handler).listen(3001, 'localhost');
http.createServer(handler).listen(3002, '192.168.0.5');
http.createServer(handler).listen(3003, 'host.example.com');
http.createServer(handler).listen(3004, 'LocalHostName.local');

(reemplace la IP del servidor: 3002 por una IP de su host ( ifconfig ), el host.example.com del servidor: 3003 por la salida de echo $HOSTNAME y LocalHostName por la salida de scutil --get LocalHostName )

y comience con

node ../multiserver.js

Ahora pruebe su "multiservidor" con Google Chrome ingresando enlace (no olvide anteponer enlace ).

Los dos primeros puertos deberían funcionar con ambos "nombres" (127.0.0.1/localhost). Así que ingresa ya sea enlace , enlace , enlace o enlace deberían mostrar "Hola mundo".

También puedes ver las nueve permutaciones de los siguientes tres puertos y nombres (por ejemplo, enlace o enlace ) que también debería mostrar" Hello World "si el nombre de host / DNS está configurado correctamente.

Si todo esto funciona, su aplicación express / node.js es defectuosa.

    
respondido por el klanomath 20.01.2017 - 19:15
-1

No soy un programador de Javascript, así que si alguien tiene mejores enlaces, edítalo.

El problema es que su servidor está escuchando solo en la dirección IPv4 y también debería estar escuchando en la dirección IPv6.

Cómo cambiar su servidor está fuera de tema para Ask Different ya que requiere cambios de código. Esta respuesta de StackOverflow podría ayudar.

Apple ha cambiado macOS desde El Capitan en adelante para buscar direcciones IPv6 en lugar de las más antiguas como se reportó aquí

Puede probar el servidor directamente en http://[::1]:8080

En el peor de los casos, puedes eliminar el alias de localhosts a :: 1, pero mejor si no puedes hacer nada, solo usa http://127.0.0.1:8080 en tus pruebas

    
respondido por el Mark 20.01.2017 - 19:03
-2

Tal vez intente usar el puerto 80. Usted dijo que 127.0.0.1:8080 funciona, así que me pregunto si 127.0.0.1 también funciona. Creo que si escribes localhost se resolverá a localhost:80 donde no hay nada escuchando.

    
respondido por el Colin 20.01.2017 - 00:31

Lea otras preguntas en las etiquetas