![]() |
1
2
curl有自己的内部DNS缓存,默认情况下,它将缓存解析地址60秒(您可以更改)。因此,相同名称的后续解析将在该时间范围内使用缓存的结果。 curl的连接缓存完全基于URL中使用的主机名,因此,如果缓存中存在“example.com”的现有可用连接,则该连接将用于对同一主机名的后续请求。curl不知道也不关心该名称的IP地址是什么,也不关心它在连接启动后是否发生了更改。当重用连接时,它跳过整个名称解析阶段。 当传输完成且连接仍处于活动状态时,连接将被放回连接缓存中(如果缓存因达到限制而被视为“满”),则连接将被关闭。 由于连接重用是基于名称进行的,所以使用另一个名称解析为现有连接的同一IP不会使curl重用该连接。它将解析名称并为此创建一个新连接。 一个连接可以无限期地保存在连接缓存中,除非它被杀死以腾出空间或被重用。如果它“死亡”(由于它从另一端关闭),当被注意到时,它最终将从缓存中删除。 HTTP/2可以通过HTTP/2发送的ping帧等将不会(ATM)处理连接缓存中的连接,这将导致它们很快被服务器杀死。(libcurl 7.62.0添加了一个新的API,允许应用程序保持这样的连接,请参见 curl_easy_upkeep ) 多哈随着curl 7.62.0引入了DOH(DNS over HTTPS)支持,DNS缓存将缓存TTL秒数的名称,而不仅仅是使用时的默认60。 告诫有一些限制、条件和边缘情况打破了这里的解释,但这是基础。 |
![]() |
elegant dice · libcurl的适当超时 7 年前 |
![]() |
cucucool · 如何将向量发布到HTTP端点 7 年前 |
![]() |
fgalan · 为什么现代卷曲版本会切断URL的#锚定部分? 7 年前 |
![]() |
Andre · libcurl不发送json数据 8 年前 |