导语
最近看到一个帖子 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。根据 的朴素数学原理,::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,每一个细节的变化都影响着我们的开发体验。了解这些底层逻辑,能让你在排查网络连接问题时,比别人快一步发现真相。