Skip to content

127.0.0.1 vs localhost vs 0.0.0.0 的异同?

这是网络与后端开发里非常核心但经常被误解的一组概念。我直接从定义 → 行为 → 工程实践三个层次,把 127.0.0.1 vs localhost vs 0.0.0.0 一次讲透。


一、先给结论(工程视角)

名称本质能否访问本机服务能否被外部访问典型用途
127.0.0.1IPv4 回环地址本机访问本机
localhost主机名(域名)本机访问(更语义化)
0.0.0.0监听所有网卡❌(不能作为目标)服务监听地址

一句话记忆:

127.0.0.1 是地址localhost 是名字0.0.0.0 是“我全都要”


二、逐个精讲


1️⃣ 127.0.0.1(Loopback Address)

定义

  • IPv4 的回环地址
  • 实际范围:127.0.0.0/8
  • 最常用:127.0.0.1

行为

txt
请求 → 不经过网卡 → 直接回到本机
  • 不走物理网络
  • 不会被外部访问
  • 永远指向“我自己”

示例

bash
curl http://127.0.0.1:3000

2️⃣ localhost(主机名)

定义

  • 一个主机名
  • 由系统解析(不是固定 IP)

解析顺序(常见)

txt
1. /etc/hosts
2. DNS

默认映射:

txt
127.0.0.1   localhost
::1         localhost

⚠️ 关键区别

场景localhost 实际指向
IPv4 环境127.0.0.1
IPv6 优先::1

👉 localhost ≠ 一定是 127.0.0.1


常见坑(真实)

js
fetch('http://localhost:3000')

而你的服务监听的是:

txt
127.0.0.1:3000

但系统优先解析 localhost → ::1 ➡️ 连接失败


3️⃣ 0.0.0.0(监听地址)

定义

  • 表示:所有 IPv4 地址
  • 只能用于监听,不能用于访问

行为

txt
监听在:
- 127.0.0.1
- 内网 IP(192.168.x.x)
- 公网 IP(如果有)

示例

bash
node app.js --host 0.0.0.0

等价于:

txt
监听所有网卡

❌ 错误用法

bash
curl http://0.0.0.0:3000

👉 这是非法目标地址


三、真实开发场景对比

🧪 本地开发

txt
监听:127.0.0.1
访问:localhost 或 127.0.0.1

最安全、最封闭。


🌐 局域网访问(手机 / 同事)

txt
监听:0.0.0.0
访问:192.168.1.10

🐳 Docker / WSL / 虚拟机(重点)

容器内:

txt
监听:0.0.0.0

宿主机访问:

txt
localhost:port

❌ 如果容器监听 127.0.0.1

txt
外部永远访问不到

四、对照表(终极版)

对比项127.0.0.1localhost0.0.0.0
类型IP 地址主机名特殊地址
是否 DNS 解析
能作为请求目标
能作为监听地址
是否支持 IPv6
是否暴露服务⚠️ 可能

五、工程级建议(非常重要)

✅ 推荐实践

场景建议
本地单机开发127.0.0.1
多设备调试0.0.0.0
跨平台兼容明确绑定 IP
避免 IPv6 坑显式使用 127.0.0.1

❗ 安全提醒

txt
监听 0.0.0.0 = 向整个网络暴露服务

生产环境必须配合:

  • 防火墙
  • 鉴权
  • 端口限制

六、一句话终极总结

127.0.0.1:我自己

localhost:给“我自己”的昵称

0.0.0.0:谁都可以来(监听)