核心结论

127.0.0.1 是IP地址,localhost 是主机名。

两者通常指向同一个东西——本机的回环地址,但实现机制不同,在某些场景下行为会有差异。


127.0.0.1 是什么

127.0.0.1 属于 127.0.0.0/8 回环地址段。发给这个地址的数据不会走网卡、不经过路由器,直接在电脑内部"转一圈"。

特点:

  • 不走外网,不走局域网
  • 速度极快
  • 固定不变,不依赖任何配置

localhost 是什么

localhost 是主机名,需要通过解析才能变成IP。解析依赖系统的 hosts 文件:

  • Linux/Mac:/etc/hosts
  • Windows:C:\Windows\System32\drivers\etc\hosts

默认内容通常包含:

127.0.0.1   localhost
::1         localhost

关键点: localhost 不是固定等于 127.0.0.1,只是默认映射。可以被修改为其他地址,也可能解析到 IPv6 的 ::1


核心区别对比

项目127.0.0.1localhost
类型IP地址主机名
是否需要解析
是否固定
是否依赖配置
支持 IPv6是(可解析到 ::1)

会踩坑的3个场景

场景1:服务绑定问题

若服务仅监听 127.0.0.1,而系统的 localhost 被解析为 IPv6 的 ::1,用 localhost 访问就会失败。

# 检查 localhost 实际解析到哪里
ping localhost
# 或
getent hosts localhost

场景2:Docker / 容器环境

容器内的 127.0.0.1localhost 指向的是容器自身,不是宿主机。如果要访问宿主机服务,需要用 host.docker.internal(Mac/Windows)或宿主机的实际IP。

场景3:hosts 文件被修改

某些开发工具或安全软件会修改 hosts 文件,导致 localhost 不再等于 127.0.0.1。排查网络问题时记得检查这一点。


使用建议

  • 开发调试:推荐用 127.0.0.1,更稳定,不依赖解析
  • 日常访问localhost 也可以,更语义化
  • 涉及 IPv6 或跨环境:明确写IP,避免上线后出现问题

一句话总结:能写IP就写IP,避免歧义。