Qual è la differenza tra 0.0.0.0, 127.0.0.1 e localhost?

Sto usando Jekyll e Vagrant sul mio Mac. Ho scoperto che il Jekyll server si 0.0.0.0:4000 a 0.0.0.0:4000 invece di 127.0.0.1:4000 . Anche il gem server si collegherà a questo indirizzo per impostazione predefinita. Posso ancora visitarlo tramite http://localhost:port . Ma per Jekyll , sembra che l’impostazione predefinita (ad es. 0.0.0.0:4000) richieda l’accesso a Internet. Non riesco a eseguire il Jekyll server senza Internet. È un piccolo bug?

Uso anche Vagrant . Ho impostato il port forwarding (8080 => 4000) in Vagrantfile, dal momento che installo Jekyll nella macchina virtuale Vagrant e lo collaudo su Macintosh. Se utilizzo l’impostazione predefinita (0.0.0.0:4000), funziona. Posso visitarlo dal mio safari con http://localhost:8080 . Ma se non c’è internet, non posso bind a 0.0.0.0:4000. Io uso il jekyll server -H 127.0.0.1 per associare il servizio a 127.0.0.1:4000 invece, quindi non posso visitarlo tramite http://localhost:8080 .

Qualcuno può spiegare la differenza tra 0.0.0.0, 127.0.0.1 e localhost ? E qualcuno può spiegare perché la differenza causerà questo problema ?

127.0.0.1 è normalmente l’indirizzo IP assegnato alla “loopback” o all’interfaccia solo locale. Questa è una scheda di rete “fasulla” che può comunicare solo all’interno dello stesso host. Viene spesso utilizzato quando si desidera un’applicazione in grado di supportare solo client nello stesso host. Un processo in ascolto su 127.0.0.1 per le connessioni riceverà solo connessioni locali su quel socket.

“localhost” è normalmente il nome host per l’indirizzo IP 127.0.0.1 . Di solito è impostato in /etc/hosts (o l’equivalente di Windows chiamato “host” da qualche parte sotto %WINDIR% ). Puoi usarlo come qualsiasi altro hostname – prova “ping localhost” per vedere come si risolve in 127.0.0.1 .

0.0.0.0 ha un paio di significati diversi, ma in questo contesto, quando viene detto ad un server di ascoltare su 0.0.0.0 che significa “ascolta su ogni interfaccia di rete disponibile”. La scheda loopback con indirizzo IP 127.0.0.1 dal punto di vista del processo del server appare esattamente come qualsiasi altra scheda di rete sulla macchina, quindi un server che ha detto di ascoltare su 0.0.0.0 accetterà anche le connessioni su tale interfaccia.

Questo spera che risponda al lato IP della tua domanda. Non ho familiarità con Jekyll o Vagrant, ma suppongo che il tuo port forwarding 8080 => 4000 sia in qualche modo legato a una particolare scheda di rete, quindi non si trova nel percorso quando ti colleghi localmente a 127.0.0.1

Nella versione corrente di Jekyll, il valore predefinito è http://127.0.0.1:4000/ .
Questo è un bene, se sei connesso a una rete ma non vuoi che nessun altro acceda alla tua applicazione.

Tuttavia, potrebbe capitare di voler vedere come la tua applicazione viene eseguita su un cellulare o da qualche altro laptop / computer.

In tal caso, puoi usare

 jekyll serve --host 0.0.0.0 

Ciò lega la tua applicazione all’host e al successivo utilizzo successivo per collegarsi ad esso da qualche altro host

 http://host's IP adress/4000