ChatGPT解决这个技术问题 Extra ChatGPT

127.0.0.1 和 localhost 有什么区别

假设在 .../hosts 中定义了以下内容:

127.0.0.1 localhost

如果有的话,使用 127.0.0.1localhost 作为服务器名称之间的实际区别是什么,尤其是在访问本地运行的正在侦听连接的进程时?

您可以说 localhost 与协议无关,IPv4 和 IPv6 都可以使用。
另一个不同之处是大多数浏览器将 localhost 视为安全来源,而 127.0.0.1 不视为安全来源。

p
paxdiablo

嗯,最可能的区别是您仍然需要在某处对 localhost 进行实际查找

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

否则,必须解析名称。并且无法保证您的 hosts 文件实际上会使用用于该分辨率(首先或根本没有),因此 localhost 可能会成为一个完全不同的 IP 地址。

我的意思是,在某些系统上,可以绕过本地 hosts 文件。 host.conf 文件在 Linux(和许多其他 Unices)上控制这一点。


主要区别在于可以通过 Unix 域套接字建立连接,如下所述:stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
如果 nss 正在运行,/etc/nsswitch.conf 选择是否首先使用 hosts 或 DNS 进行主机查找。
@DonViegues 那是 MySQL 特定的和 IMO 糟糕的设计。它将看到 localhost 并尝试使用 unix-socket 而不是使用 IP 连接,但对于 127.0.0.1 它只使用 IP。
@ArmanOrdookhani AFAIK,如果您通过 SSH 连接到远程主机,然后从那里连接到 MySQL(如 SSH 隧道到达 MySQL 服务器),您必须使用 127.0.0.1,因为整个事情都通过 TC/IP。但是,如果在同一台机器上运行的 2 个进程想要连接,则 localhost(unix 套接字)更快/有 lees 开销。谢谢!
@DonViegues 是的,你是对的,unix 套接字的开销比 TCP/IP 少。我只是想提一下这种行为是特定于 MySQL 的,而不是操作系统或网络级别的行为。
R
Ryan Bigg

Wikipedia sums this up well:

在现代计算机系统上,localhost 作为主机名转换为 127.0.0.0/8(环回)网络块中的 IPv4 地址,通常是 127.0.0.1,或 IPv6 中的 ::1。

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


这实际上很重要。 localhost 可以解析为 IPv6 地址,而 127.0.0.1 不能。在仅 IPv6 的系统上使用 localhost 可以工作,而 127.0.0.1 则不能,因为 IPv4 不可用。
在我的 Windows10 系统上,DNS 查找非常非常慢,大约 1100 毫秒。所以我切换到 127.0.0.1
W
Wayne Walker

一些应用程序会特别对待“localhost”。 mysql 客户端会将 localhost 视为连接到本地 unix 域套接字的请求,而不是使用 tcp 连接到 127.0.0.1 上的服务器。这可能更快,并且可能在不同的身份验证区域中。

我不知道其他应用程序对 localhost 的处理方式与 127.0.0.1 不同,但可能有一些。


p
paxdiablo

好吧,通过IP更快。

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

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

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


localhost 更快,不使用 TCP/IP
@Don Viegues - 你所说的与这个线程中的其他答案相矛盾。你能详细说明吗?
是的,我将复制并粘贴我的其他评论:主要区别在于可以通过 Unix Domain Socket 建立连接,如下所述:stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
特定于 MySQL 的 @DonViegues,它在 special way 中处理 localhost。其他应用程序可能仍会查找 localhost
d
d_ethier

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