5 votes

Pourquoi les navigateurs ne résolvent-ils pas localhost ?

J'ai un programme sur ma machine qui écoute sur le port 8080 pour répondre aux requêtes HTTP. Mais lorsque j'essaie d'aller sur http://localhost:8080/ dans un navigateur...

Chrome dit :

La page localhost ne fonctionne pas

localhost n'a pas envoyé de données. ERR_EMPTY_RESPONSE

Firefox redirige la demande vers www.localhost.com:8080, ce qui n'est évidemment pas correct. Mes recherches suggèrent qu'il fait cela parce qu'il ne peut pas trouver localhost.

Safari indique qu'il ne peut pas ouvrir la page car "le serveur a interrompu la connexion de manière inattendue".

Cependant, si je me rends sur le site http://127.0.0.1:8080 la page se charge correctement.

Il semblerait donc que, pour une raison quelconque, OS X ne résolve pas correctement localhost en 127.0.0.1. Si j'essaie de ping localhost à partir de la ligne de commande, cela fonctionne, mais je crois savoir que la résolution des noms fonctionne différemment d'un endroit à l'autre.

J'ai lu plusieurs problèmes où localhost n'est pas résolu, par exemple lors d'un ping, mais je n'ai pas ce problème. Tous les cas où localhost ne fonctionnait pas dans le navigateur semblent ne pas avoir de solutions liées au problème que je rencontre. J'ai également vu des endroits où les gens ont mentionné que localhost fait fonctionne dans le navigateur, je me demande donc ce que je fais de travers.

A partir des commentaires
Si j'essaie l'adresse IPv6 de localhost http://[::1]:8080/ j'obtiens alors les mêmes erreurs qu'en utilisant localhost.

8voto

klanomath Points 63400

Vérifiez d'abord la résolution du nom avec le résolveur du système :

dscacheutil -q host -a name localhost

Si vous obtenez un résultat comme :

name: localhost
ipv6_address: ::1

name: localhost
ip_address: 127.0.0.1

le résolveur de système fonctionne correctement.

Arrêtez votre application node.js, créez un simple serveur node.js en utilisant ce fichier avec un nom arbitraire (par exemple 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');

(remplacez l'IP du serveur :3002 par une IP de votre hôte ( ifconfig ), el host.example.com du serveur :3003 par la sortie de echo $HOSTNAME y Nom de l'hôte local par la sortie de scutil --get LocalHostName )

et le faire commencer par

node ../multiserver.js

Testez maintenant votre "multiserveur" avec Google Chrome en entrant http://name:port (n'oubliez pas de faire précéder http:// ).

Les deux premiers ports devraient fonctionner avec les deux "noms" (127.0.0.1/localhost). Donc, en entrant l'un ou l'autre http://127.0.0.1:3000 , http://127.0.0.1:3001 , http://localhost:3000 ou http://localhost:3001 devraient tous donner "Hello World".

Vérifiez également les neuf permutations des trois ports et noms suivants (par ex. http://LocalHostName.local:3002 ou http://192.168.0.5:3004 ) qui devraient tous donner "Hello World" si le nom d'hôte et le DNS sont correctement configurés.

Si tout cela fonctionne, votre application express/node.js est défectueuse.

-2voto

Robocide Points 1084

Essayez peut-être d'utiliser le port 80. Vous avez dit 127.0.0.1:8080 fonctionne, je me demande donc si 127.0.0.1 fonctionne également. Je pense que si vous tapez localhost il se résoudra à localhost:80 où rien n'est à l'écoute.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X