时间:2026-01-06 12:12
人气:
作者:admin
点赞 + 收藏 === 学会????????????
localhost 是主机名(域名) ,属于应用层概念;
127.0.0.1 是IPv4 回环地址,属于网络层概念。
两者都用于访问本机服务,但 localhost 必须通过解析才能映射到具体 IP(默认是 127.0.0.1 或 IPv6 的 ::1),而 127.0.0.1 是直接的网络层标识,无需解析。

127.0.0.0/8 网段:不只是 127.0.0.1,整个 127.x.x.x 网段(共 16777216 个地址)都属于回环地址,访问任何一个都会指向本机。localhost 的特殊性:它是一个保留主机名,不能被注册为公共域名,且操作系统会优先通过 hosts 文件解析,而非公共 DNS 服务器。这是两者最核心的区别 ——是否需要解析,以及解析的顺序。
localhost 的解析流程(应用层 → 网络层)当你在浏览器输入 http://localhost:3000 时,操作系统会执行以下步骤:
检查本地 hosts 文件
C:\Windows\System32\drivers\etc\hosts/etc/hostshosts 文件中有如下映射:127.0.0.1 localhost 或 ::1 localhost,则直接使用对应的 IP。若 hosts 文件无映射,查询本地 DNS 缓存
localhost,若有缓存则直接使用。若缓存无结果,查询本地 DNS 服务器
localhost 是保留主机名,公共 DNS 服务器通常也会返回 127.0.0.1 或 ::1。解析完成后,转换为 IP 地址进行网络请求
127.0.0.1 的访问流程(直接进入网络层)当你输入 http://127.0.0.1:3000 时,跳过所有解析步骤:
lo 接口)。127.0.0.1 或 0.0.0.0 时,即可响应请求。localhost:支持 IPv4 和 IPv6 双协议。
localhost 可能优先解析为 ::1(IPv6 回环地址)。server.listen(3000, 'localhost') 会同时监听 IPv4 的 127.0.0.1:3000 和 IPv6 的 ::1:3000。127.0.0.1:仅支持 IPv4。
127.0.0.1 都只会走 IPv4 协议。server.listen(3000, '127.0.0.1') 仅监听 IPv4 地址。127.0.0.1 略快:因为跳过了 DNS 解析流程(即使是本地 hosts 文件解析,也需要一次文件读取和匹配)。服务端程序的监听地址,会影响是否能被 localhost 或 127.0.0.1 访问:

localhost 可以被自定义映射:
你可以修改 hosts 文件,将 localhost 映射到任意 IP,例如:
192.168.1.100 localhost
此时访问 localhost 会指向局域网的 192.168.1.100,而不是本机。
127.0.0.1 无法被自定义:
127.0.0.1 都只会指向本机。localhost 主机名,但一定能识别 127.0.0.1。::1,此时只能通过 localhost 访问(解析为 ::1),而 127.0.0.1 无法访问。优先使用 localhost
devServer.host: 'localhost')。使用 127.0.0.1 的场景
hosts 文件被修改,localhost 被映射到非本机地址时。127.0.0.1。特殊场景:0.0.0.0
hosts 文件,观察 localhost 映射/etc/hosts(Linux/macOS)或 C:\Windows\System32\drivers\etc\hosts(Windows)。192.168.1.1 localhost。ping localhost,会发现 ping 的是 192.168.1.1,而非 127.0.0.1。ping 127.0.0.1,仍然 ping 本机。hosts 文件默认配置:127.0.0.1 localhost 和 ::1 localhost。在 Node.js 中运行以下代码:
const http = require('http');
const server = http.createServer((req, res) => {
res.end('Hello World!');
});
// 监听 localhost
server.listen(3000, 'localhost', () => {
console.log('Server running on localhost:3000');
});
执行 netstat -tulpn | grep 3000(Linux/macOS)或 netstat -ano | findstr 3000(Windows)。
会发现服务同时监听 127.0.0.1:3000 和 ::1:3000(IPv4 + IPv6)。
若将监听地址改为 127.0.0.1,则仅监听 127.0.0.1:3000。

