为什么 getaddrinfo 有时与 "example.com" 和 "www.example.com" 的行为不同?

Why does getaddrinfo sometimes behave differently with "example.com" and "www.example.com"?

这是来自 MSDN 的代码示例:getaddrinfo

您可以使用"baidu.com"和"www.baidu.com"进行测试。

因为baidu.com和www.baidu.com是不同的地址!

www.example.com 在 DNS 中注册了一条 A 类型记录(或 CNAME,它指向一条 A 记录——这稍微简化了)一条 A 记录是一个名称,在这种情况下 www 指向 IP 地址 12.34.56.78。 (我相信你已经知道了!)

example.com 也可以注册 A 记录(虽然不是 CNAME),这称为 Apex(或裸体!)域。 example.com的A记录很可能指向123.45.67.89

一点历史

出现这种情况的部分原因是,在互联网早期,服务器的主机名类似于 LOCUS.UC.EDU,因为很难知道 LOCUS 可能提供哪些服务.您可以附加 CNAME FTP.UC.EDU 以指向该机器。这样人们就知道它提供了什么服务。那时,www 只是另一种服务,它在集体意识中没有特殊的位置。 (所有这些都是在互联网发展的一两年内发生的!)但你也很可能希望 bob@UC.EDU 工作。所以 UC.EDU 也需要是主机名

事实上,它仅以主机名开头(以及获得 telexed 的主机记录 - 我很喜欢这个事实) - 但在这种情况下我们将忽略它。

回到事实

通常 - 应该 - 发生的是在 Apex 注册了一个 A 记录,在 www 注册了一个 CNAME 但是当然没有这个要求你可以在你的域中拥有任何你想要的记录。