Why is "127.0.0.1 localhost" needed in HOSTS file?

Solution 1:

The hosts file just associates canonical or fully qualified names to IP addresses.

For instance, I could have:

127.0.0.1  moes-bar-and-grill

Then anything connecting to moes-bar-and-grill would establish a connection to the loopback device, aka 127.0.0.1, commonly resolved as localhost.

I could also have (and this is quite common)

127.0.0.1  annoying-ad-server.com

Applications continue to work because they will connect to 127.0.0.1 (which is still a configured / up interface) if localhost does not resolve.

I'm not sure why you would want to disable the loopback address, but simply taking localhost out of your host file is not going to do that.

Edit

Well written software will make more than one attempt at resolving anything (resolving in a sense of working around problems, no pun intended) before it just dies and in some cases will continue to function even if things are not as expected. That does not mean that the software will work as advertised, it only means that it was written by a very defensive programmer.

Very defensive does not always mean helpful when it comes to telling the user that serious problems exist, for instance localhost not resolving. I can write stuff that passes tests no matter what a user does to their system, but that does nothing to promote the cause of "This won't work!". There is a stark difference between it runs and it works and you will only explore the difference between the two over time with every program that you run.

While everything seems to work, now, I think you may be headed for trouble later.

Disclaimer: I write software for a living.

Solution 2:

The hosts file is a mapping between the IP address and the host name so that when you type the host name it resolves to the specified address.

By removing the line you are stopping Windows taking "localhost" and mapping it to "127.0.0.1".

I can think of two reasons why you are seeing it "work".

  1. You haven't rebooted the machine so the mapping is still in memory.
  2. The applications you've tried it in do the mapping for you.

As long as #2 applies you don't need it, but were you to use an application that didn't do the mapping for you it would fail.

So, on balance, you should put the line back. However, you don't have to do it as a matter of urgency.