Safari is unable to reach localhost (127.0.0.1)

7

7

I've encountered a really strange Mac problem: Safari is unable to connect to localhost whereas all other applications can connect as normal (Firefox, Chrome, ping, etc.).

My /etc/hosts is the standard setup:

$ egrep localhost /etc/hosts
# localhost is used to configure the loopback interface
127.0.0.1   localhost
::1         localhost 
fe80::1%lo0 localhost
127.0.0.1   testing.localhost

Question: Have anyone else encountered this? What could be the problem?

Update #1: I have a server running on localhost:8080. When accessing from Safari I get the error message "Safari could not connect to the server". "http://localhost:8080/" works flawlessly in Firefox and Chrome.

Update #2: Same problem with "http://127.0.0.1:8080/" - so it does not seem to be related to resolving localhost to 127.0.0.1.

knorv

Posted 2009-08-27T16:22:50.740

Reputation: 3 392

Is there any remote chance your are using a proxy server? – BinaryMisfit – 2009-09-03T08:34:00.850

Diago: I'm not using a proxy server. – knorv – 2009-09-04T08:17:01.300

1What's the http server running on localhost? – None – 2009-09-06T10:55:54.953

1For the archives (see comments at grawity's answer), though it does not solve the question above: on my Mac OS X 10.6, with the /etc/hosts as above and IPv6 left at its default automatic, requesting 127.0.0.1:8080 makes Safari use IPv4 (which could still connect to a server providing IPv6). Requesting localhost:8080 makes Safari use IPv6. – Arjan – 2009-09-07T15:14:14.987

how about sniffing to see what the difference is between the two browsers' requests? – mihi – 2009-09-08T17:28:55.850

@knorv, can you tell us how you solved it? – Arjan – 2009-09-10T14:54:19.127

Answers

4

I think we need a little more information based on your question.

I'm going to guess you have a web server running to accept requests? I currently don't, and Safari won't connect to 127.0.0.1, because it "Couldn't find 127.0.0.1" - even though I can ping it just fine.

So first, you need to have something running. Secondly, have you tried connecting to testing.localhost with Safari, just incase the two entries are confusing Safari (this is entirely possible).

When you say "applications can connect as normal" with Chrome and Firefox, what are you seeing? The web page you're expecting to see? A different error?

Edit

I downloaded and installed MAMP, and I could not reproduce this error.

Some forum threads suggest IPv6 resolution is causing this issue. I would be inclined to turn off IPv6 and remove the entry from the hosts file (temporarily just for testing)

  1. Apple Menu > System Preferences
  2. Network
  3. Select your Network Connection > Advanced
  4. Configure IPv6 > Off

Apply, restart, and see how it goes.

EvilChookie

Posted 2009-08-27T16:22:50.740

Reputation: 4 519

Thanks for the input. I've added a clarifying update to my post. – knorv – 2009-08-27T16:48:24.653

1I had the same problem. I removed the IPv6 lines from /etc/hosts and it is working. Thanks for the hint. – tamasd – 2011-08-21T10:26:02.700

3

I've had this happen before -- using http://computername.local/ worked for me, but I'm unsure why it would be different than just using a name in a host file.

ericvg

Posted 2009-08-27T16:22:50.740

Reputation: 1 186

the problem might be that the connection to 127.0.0.1 goes through the interface lo0, whereas computername.local doesn't need to... – Atmocreations – 2009-09-07T17:01:57.233

1

Comment out the line:

::1         localhost 

from your /etc/hosts file. Apparently this would be caused by IPv6 support in Safari.

Snark

Posted 2009-08-27T16:22:50.740

Reputation: 30 147

You may be right, but http://127.0.0.1:8080 does not work either and I don't think that would rely on anything from the hosts file. (However, like EvilChookie answered: disabling IPV6 in the network settings may have a different result.)

– Arjan – 2009-09-07T06:59:37.273

1

Some applications decide to bind to only a single interface - 192.168.13.37, for example, if that is the address assigned to eth0 or such - instead of using 0.0.0.0 for all interfaces.

Others might be using only IPv6 addresses ::1 (localhost) or :: (all interfaces). Try http://[::1]:8080/ in this case.

user1686

Posted 2009-08-27T16:22:50.740

Reputation: 283 655

Interesting! The python -m SimpleHTTPServer 8080 does not support http://[::1]:8080/ but the built-in Apache (Web Sharing) does. (Though, if the application would only allow some address or some protocol, then wouldn't other browsers show the same problems while connecting?) – Arjan – 2009-09-07T08:04:39.950

Arjan: Maybe Safari first tries IPv4, gets "Connection Refused", and stops trying? I don't actually know. – user1686 – 2009-09-07T11:11:56.437

When using Listen 8080 or Listen [::1]:8080 in Apache's /etc/apache2/httpd.conf then sudo lsof -i :8080 shows that httpd is using IPv6 only. Next, requesting 127.0.0.1:8080 in Safari makes lsof show Safari uses IPv4, but still connects fine. Using localhost:8080 makes Safari use IPv6. Likewise Listen 127.0.0.1:8080 only enables IPv4. But: Listen localhost:8080 makes httpd use BOTH IPv4 and IPv6. Still: Safari handles all, on my Mac. (I wonder if @knorv has issues when using Apache or Python rather than the server (s)he is using. And if changing something like Listen helps.) – Arjan – 2009-09-07T12:10:46.787

0

i'm not going to answer your question directly, but offer an alternative solution: use virtualhostx to manage the local DNS. See also if MAMP is not a good solution for your local development needs (if that's what you're after).

pixeline

Posted 2009-08-27T16:22:50.740

Reputation: 323

Sorry, but this is totally unrelated to my question. I'm not even using Apache. – knorv – 2009-09-04T08:18:41.127

0

To ensure it's not an issue with your web server (like @nagul asked: what server are you using?), on my 10.6 Snow Leopard with IPv6 left at automatic, and even with 127.0.0.1 testing.localhost added to my /etc/hosts, the following works fine:

  • Change the Listen port of the built-in Apache from 80 to 8080:
    sudo vi /etc/apache2/httpd.conf
  • Run the built-in Apache by enabling System Preferences, Sharing, Web Sharing. Or restart using: sudo apachectl restart

Likewise, for me no problems using:

  • python -m SimpleHTTPServer 8080

I know you stated you're not using any proxy. Just in case there's any doubt: recent versions of Firefox allow you to choose between Firefox-specific network settings (which was the only option in older versions), and the system settings. Safari always uses the system settings. Of course, good proxy settings would ignore local addresses (defaults on my Mac for Bypass proxy settings for these Hosts & Domains: *.local, *.lan, 169.254/16). Still, one could check if Firefox still works when making it use the system settings just like Safari. (Firefox Preferences, Advanced, tab Network, button Settings.)

(Anything in the server logs or Console logs? Which version of Mac OS?)

Arjan

Posted 2009-08-27T16:22:50.740

Reputation: 29 084

0

What's your DNS? some DNS providers like OpenDNS depends on your settings might prevent you from going somewhere, so to test it completely remove DNS and make sure you have no proxy configured as well

alexus

Posted 2009-08-27T16:22:50.740

Reputation: 2 484

I doubt DNS can be an issue if http://127.0.0.1:8080 does not work.

– Arjan – 2009-09-09T22:20:23.723

-1

it sounds like your server may not be running on the ip and port you're expecting. what is output when you run the following in a terminal?

netstat -anp tcp | grep 8080

you should see a line corresponding to your server. if no line appears, then your server may be running on a different port.

aaron

Posted 2009-08-27T16:22:50.740

Reputation: 481

That would make it Quite A Wonder that other browsers work fine. ;-) – Arjan – 2009-09-09T16:59:40.657