假设在 .../hosts
中定义了以下内容:
127.0.0.1 localhost
如果有的话,使用 127.0.0.1
和 localhost
作为服务器名称之间的实际区别是什么,尤其是在访问本地运行的正在侦听连接的进程时?
localhost
与协议无关,IPv4 和 IPv6 都可以使用。
localhost
视为安全来源,而 127.0.0.1
不视为安全来源。
嗯,最可能的区别是您仍然需要在某处对 localhost
进行实际查找。
如果您使用 127.0.0.1
,那么(智能)软件会将其直接转换为 IP 地址并使用它。 gethostbyname
的一些实现将检测点格式(并且可能是等效的 IPv6 格式)并且根本不进行查找。
否则,必须解析名称。并且无法保证您的 hosts
文件实际上会使用用于该分辨率(首先或根本没有),因此 localhost
可能会成为一个完全不同的 IP 地址。
我的意思是,在某些系统上,可以绕过本地 hosts
文件。 host.conf
文件在 Linux(和许多其他 Unices)上控制这一点。
在现代计算机系统上,localhost 作为主机名转换为 127.0.0.0/8(环回)网络块中的 IPv4 地址,通常是 127.0.0.1,或 IPv6 中的 ::1。
唯一的区别是它将在 DNS 中查找 localhost
解析到的系统。这个查找真的非常快。例如,要访问 stackoverflow.com
,您在地址栏中输入(或使用指向此处的书签)。无论哪种方式,您都是通过主机名到达这里的。 localhost
提供了类似的功能。
一些应用程序会特别对待“localhost”。 mysql 客户端会将 localhost 视为连接到本地 unix 域套接字的请求,而不是使用 tcp 连接到 127.0.0.1 上的服务器。这可能更快,并且可能在不同的身份验证区域中。
我不知道其他应用程序对 localhost 的处理方式与 127.0.0.1 不同,但可能有一些。
好吧,通过IP更快。
基本上,当您通过服务器名称调用时,它会转换为原始 IP。
但是要记住一个 IP 是很困难的,因此创建了域名。
我个人使用 http://localhost
而不是 http://127.0.0.1
或 http://username
。
没有什么不同。一个比另一个更容易记住。通常,您定义一个名称以与 IP 地址关联。您不必为 127.0.0.1 指定 localhost,您可以指定任何您想要的名称。
/etc/nsswitch.conf
选择是否首先使用hosts
或 DNS 进行主机查找。