还在纠结 localhost 和 127.0.0.1?我翻完了 RFC 6724 源码级逻辑,带你彻底终结这个争论

39 阅读1分钟

导语

最近看到一个帖子 localhost 解析的问题。

1. 核心结论:优先级由“策略表”决定

直接上干货:现代操作系统在处理 IP 地址选择时,严格遵循 RFC 6724。

系统拿到 localhost 解析出的 IPv4 和 IPv6 地址后,会根据内部的一张 Prefix Policy Table(前缀策略表) 进行排序。

在 Windows 下,你可以通过这条命令查看你本机的“优先级”:

netsh interface ipv6 show prefixpolicies

你会发现,::1/128 的 Precedence(优先级)通常是 50,而代表 IPv4 映射的 ::ffff:0:0/96 只有 35。根据 50>3550 > 35 的朴素数学原理,::1 永远坐稳头把交椅。

2. 深入:*.localhost 为什么能实现“免配置解析”?

你可能发现输入 test.localhost 也能访问本地服务。这归功于 RFC 8801 定义的自动通配机制。现代浏览器(如 Chrome 86+)在解析阶段就对 *.localhost 进行了硬编码拦截,直接指向回环地址,根本不走公网 DNS。

3. 实战:如何“强制”系统回归 IPv4 时代?

如果你的业务环境对 IPv6 支持不佳,可以通过修改策略表手动提权:

  • 强制 IPv4 优先: netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 100 4
  • 重置恢复: netsh interface ipv6 reset

结语

技术更新迭代很快,从 RFC 1123 到 RFC 6724 再到如今的 RFC 8801,每一个细节的变化都影响着我们的开发体验。了解这些底层逻辑,能让你在排查网络连接问题时,比别人快一步发现真相。