127.0.0.1和localhost有什么区别?

223
假设在.../hosts中定义如下内容:
127.0.0.1 localhost

如果本地运行的进程正在监听连接,使用 127.0.0.1localhost 作为服务器名称时,有什么实际差异吗?


23
СйатЈ»С╗ЦУ»┤localhostТў»тЇЈУ««ТЌатЁ│уџё№╝їIPv4тњїIPv6жЃйтЈ»С╗ЦСй┐ућесђѓ - Steve-o
1
另一个不同之处在于,大多数浏览器将localhost视为安全来源,而127.0.0.1则不被视为安全。 - user10833119
5个回答

169

最有可能的区别在于您仍然需要在某个地方实际进行查找localhost

如果您使用127.0.0.1,那么(智能)软件将直接将其转换为IP地址并使用它。一些gethostbyname的实现将检测到点格式(和可能的IPv6格式),并且根本不进行查找。

否则,名称必须得到解析。而且不能保证您的hosts文件将用于该解析(首先还是后来),因此localhost可以变成完全不同的IP地址。

我所指的是,在某些系统上,本地hosts文件可能会被绕过。在Linux(和许多其他Unix系统)上,host.conf文件控制着这一点。


10
主要区别在于可以通过Unix域套接字建立连接,如此文所述:https://dev59.com/J3A65IYBdhLWcg3wogIb - Don Viegues
如果nss正在运行,/etc/nsswitch.conf会选择首先使用主机查找的hosts或DNS。 - Mark Lakata
2
@DonViegues 这是MySQL特定的,而且在我看来是不好的设计。它会看到localhost并尝试使用unix-socket来连接而不是使用IP来连接,但对于127.0.0.1它只是使用IP。 - Arman Ordookhani
据我所知,如果您通过SSH连接到远程主机,然后从那里连接到MySQL(例如通过SSH隧道到达MySQL服务器),则必须使用127.0.0.1,因为整个过程都是通过TC / IP进行的。但是,如果在同一台计算机上运行的两个进程想要连接,则localhost(Unix套接字)更快/开销更小。谢谢! - Don Viegues
3
@DonViegues 是的,你说得对,Unix套接字比TCP/IP开销小。我只是想提一下这种行为是特定于MySQL而不是操作系统或网络层的。 - Arman Ordookhani

65

维基百科已经很好地总结了这一点:

在现代计算机系统中,localhost作为主机名会被解析成一个IPv4地址,该地址属于127.0.0.0/8(本地回环)网络地址空间,通常是127.0.0.1,或者在IPv6中是::1。

唯一的区别是它会在系统的 DNS 中查找 localhost 的解析结果。这个查询非常快速。例如,要访问 stackoverflow.com,你在地址栏中输入了这个网址(或使用了一个书签来指向这里)。无论哪种方式,你都是通过一个主机名来到这里的。 localhost 提供了类似的功能。


28
这很重要。localhost可以解析为IPv6地址,而127.0.0.1则不行。在仅支持IPv6的系统上使用localhost能够正常工作,而由于IPv4不可用,使用127.0.0.1则不能。 - Erwin Jansen
在我的Windows10系统上,DNS查找非常慢,大约需要1100毫秒。因此,我切换到127.0.0.1。 - Wolfgang Kuehn

40
一些应用程序会特殊对待“localhost”。
例如,MySQL客户端会将“localhost”视为连接到本地Unix域套接字的请求,而不是使用TCP连接到服务器上的“127.0.0.1”。这可能更快,并且可能位于不同的身份验证区域。

11

嗯,根据 IP 是更快的。

基本上,当您通过服务器名称进行调用时,它将转换为原始 IP。

但是,要记住 IP 会很困难,因此创建了域名。

个人使用 http://localhost 而不是 http://127.0.0.1http://username


本地主机更快,因为它不使用TCP/IP。 - Don Viegues
@Don Viegues - 你所说的与本帖中其他答案相矛盾。你能详细说明一下吗? - Dikla
是的,我会复制并粘贴我的另一个评论:主要区别在于连接可以通过Unix域套接字进行,如此处所述:https://dev59.com/J3A65IYBdhLWcg3wogIb - Don Viegues
10
@DonViegues提到的是MySQL中特定处理localhost的方式,这与其他应用程序查找localhost的方式可能不同。 - William Denniss
如果MySQL托管在Windows计算机上,那将会有很大的区别。在这种情况下,通过IP地址进行连接可能会更快。 - undefined

-8

没有什么不同。一个比另一个更容易记住。通常,您定义一个名称与IP地址相关联。您不必为127.0.0.1指定localhost,您可以指定任何想要的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接