一、相同点
通常认为,localhost
和127.0.0.1
是等价的,这是从功能上来说的一种观点。
因为我们在调试程序时,有时候用http://localhost/
来访问本地服务器网页,有时候用http://127.0.0.1/
来访问,这就是本地服务器的两个不同写法而已,就好比一个网页可以通过域名来访问也可以通过IP来访问一样,localhost
代表的是域名,而127.0.0.1
则代表IP地址。
在windows系统上ping localhost
时,回包则来自127.0.0.1
:
C:\Users\win10>ping localhost正在 Ping DESKTOP-VTHK7VU [127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=200
可见操作系统自动将localhost
解析为127.0.0.1
这个地址。这个映射关系是操作系统的配置文件中默认配置好的,windows中路径为C:\WINDOWS\system32\drivers\etc\hosts
,Unix/Linux路径为/etc/hosts
。
localhost
的意思是:本地主机,它实际上是一个保留域名,代表这台计算机。在访问时会指向回环地址[127.0.0.1]
;要注意的是,在操作系统支持IPv6之后,它同时还指向IPv6的回环地址[::1]
。
两者的一种重要应用,就是用ping localhost
或者ping 127.0.0.1
,来测试本机的回路是否正常,如果得到一个成功的返回,则可以验证本机的TCP/IP协议簇被正确安装。
二、不同点
localhost | 127.0.0.1 | 本机IP | |
---|---|---|---|
网络 | 不联网 | 不联网 | 联网 |
传输 | 不使用网卡,不受防火墙和网卡的限制 | 网卡传输,受防火墙和网卡的限制 | 网卡传输,受防火墙和网卡的限制 |
访问 | 本机访问 | 本机访问 | 本机/外部访问 |
值得注意的是,localhost
是不经网卡传输的,也不受防火墙和网卡的限制,所以一般在本地服务中用localhost
是最好的。
这个特点也可以解释我们有时会遇到的一个问题:localhost
和127.0.0.1
有一个能访问而另一个不能访问。因为localhost
访问时,是带着系统当前用户的权限去访问的;而用127.0.0.1
时,是本机通过网络再去访问本机,则可能涉及到网络用户的权限(网卡、防火墙等)。