Answers:
是的,如果一个浏览器无法响应,则过去5-10年中的大多数浏览器都会尝试其他A记录。有时,这有时有时被称为“浏览器重试”或“客户端重试”。您几乎只能在各种浏览器利用的背景下找到有关此功能的东西,此功能可针对未使用它的网站进行使用(请参阅DNS重新绑定和DNS固定,反dns固定,反反dns固定,反反-anti-dns固定,等等。声誉不好,但确实证明了它的存在。
几乎每个浏览器确实确实会收到A记录的完整列表,并且确实会检查其他浏览器(如果使用的记录失败)。您可以期望每个客户端在服务器关闭时首次尝试访问站点时都要等待30秒,直到它连接到工作地址为止。然后,浏览器将缓存正在工作的地址,并继续使用该地址进行将来的请求,除非它也失败了,然后它将不得不再次搜索该列表。因此,在第一个请求上等待30秒,然后再进行。
但这不是您一定要使用的东西,它将对浏览器的兼容性,操作系统的兼容性,代理的兼容性,缓存控制标头产生很多警告,这将对它是否记住哪个IP中断或开始拥有IP产生奇怪的影响。在每个请求上等待30秒之后,为您的网站编写自定义客户端的人们最终将使用gethostbyname而不是getaddrinfo,并且无法处理故障转移,以及各种潜在的问题。
您也不能依靠多个A记录来支持“主”和“从”服务器,因为您永远不知道浏览器将从列表中选择哪个地址。它们都必须具有运行时处理访客的能力,因为任何人都可以在访问成功时获得流量。浏览器可能会认为列表中的第三个服务器是最吸引人的,也许它看起来是最接近的,即使所有三个服务器仍处于运行状态,它也会选择该服务器。
但是,如果您可以忍受这些限制,并且拥有一个可以预测浏览器交互的合理简单的HTTP系统,那么它将起作用。
哦,您还必须与很多人打交道,说这不存在(因为15年前是这样)。但是,如果需要证明,您可以尝试通过telneting到具有多个A记录的域名,其中一些IP失效而有些则良好(是的,即使是好的老式telnet现在也使用getaddrinfo并可以优雅地处理多个A记录) -它将打印出一个不错的IP列表,直到最终成功为止。
这是基本的DNS负载平衡分发技术:DNS Round Robin。这与浏览器无关,它取决于resolver的实现以及DNS地址的本地/远程缓存。所做的更改是,如果服务器发生故障,由于DNS层中的缓存,您的网站可能无法访问。
有关WikiPedia上的Round DNS的基本说明,请参见此处。
nslookup cnn.com
在Windows和host cnn.com
Linux上都返回IP地址列表,因此,它肯定取决于浏览器的实现。
操作系统确定要使用的IP,而不是浏览器。Windows将循环返回的列表(在从DNS返回的列表中),尽管在刷新DNS或超时之前将继续使用相同的地址。* ix实现部分取决于捆绑的tcp堆栈实现,但通常也遵循循环方法。
InetAddress.getAllByName("example.com")
则会得到包含所有IP地址的列表,因此,如果需要,我可以选择启动到所有IP地址的TCP连接。如果getaddrinfo()
在C语言中使用,则是相同的。因此,开发人员而不是操作系统绝对是一个选择。DNS服务器仅决定以什么顺序返回IP地址列表。