我想知道与真实浏览器(如chrome(相比,Curl/LibCurl中的默认DNS解析行为,以及它在多大程度上取决于操作系统和递归解析器? - 还想知道是否有任何重试,如手册页中提到的,每次 5 秒,2 次重试?
- 是否有办法在计算机上检查或在 curl 实用程序本身中检查 DNS 解析超时逻辑?
- Chrome 不断改进处理 DNS 解析的逻辑。有没有关于最近版本的白皮书?
就像在 chrome 中一样,到目前为止,它看起来像是执行 5 次查询,在 ~ 9 秒内重试 4 次,保持 300 毫秒的间隔,最多 15 次重试。
首先,为了使事情复杂化,libcurl 有几种方法可以解析名称。首先,您可以构建 libcurl 以使用不同的解析器后端 - 大多数系统上的默认值是"线程解析器",但也有"同步"股票解析器和 c-ares 后端。然后,在最近的libcurl版本中,您还可以选择使其使用DNS-over-HTTPS到指定的服务器。
但是专注于默认方法,线程方法,当想要解析名称时,它将启动一个帮助程序线程,并且该线程将简单地调用getaddrinfo()
并等待响应。这个函数通常由libcurl运行的各种平台上的libc/OS提供,它的行为也在某种程度上是由POSIX标准决定的,现在它往往是相当好的开发和完善的代码。
但是,Chrome在某些平台上使用自己的名称解析代码,在某些平台上使用本机(getaddrinfo(解析器函数(我被告知(。不幸的是,我缺乏知识来更多地谈论这一点......