使用 HttpClient 获取时如何防止 DNS 查找
How to prevent DNS lookup when fetching by using HttpClient
我不确定我做的是否正确
当 keep-alive
设置为 false 时,下面的方法会阻止 DNS lookup
吗?
主持人是:tatoeba.org
url 是:http://188.213.24.161/eng/sentences/show/1
此处截图
url 给出的 以上
主机设置如下
我相信,如果您将主机指定为 IP 地址(就像您所做的那样),那么 .net 将跳过 dsn 查找(无论保持活动状态或主机 header 设置如何)。
如果您深入了解 HttpClient,您会发现它基本上使用 HttpWebRequest 来发出请求。 https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpClient.cs
HttpWebRequest 最终使用一个名为 ServicePoint 的 class,它调用一个
Dns.TryInternalResolve.
Dns.TryInternalResolve 不尝试解析 IP 地址。
更多信息请参考:
https://referencesource.microsoft.com/#System/net/System/Net/DNS.cs,f8023b9c19212708
我还尝试通过 运行 以下几行来验证并使用 netmon
监视请求
using (HttpClient c = new HttpClient())
{
var response = c.GetAsync(url).Result;
}
我看到确实对于包含主机名 .net 的 url 发出 dns 请求,而对于以 ipAddress 作为主机名的请求则没有 dns 请求。
我不确定我做的是否正确
当 keep-alive
设置为 false 时,下面的方法会阻止 DNS lookup
吗?
主持人是:tatoeba.org
url 是:http://188.213.24.161/eng/sentences/show/1
此处截图
url 给出的 以上
主机设置如下
我相信,如果您将主机指定为 IP 地址(就像您所做的那样),那么 .net 将跳过 dsn 查找(无论保持活动状态或主机 header 设置如何)。
如果您深入了解 HttpClient,您会发现它基本上使用 HttpWebRequest 来发出请求。 https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpClient.cs
HttpWebRequest 最终使用一个名为 ServicePoint 的 class,它调用一个 Dns.TryInternalResolve.
Dns.TryInternalResolve 不尝试解析 IP 地址。
更多信息请参考: https://referencesource.microsoft.com/#System/net/System/Net/DNS.cs,f8023b9c19212708
我还尝试通过 运行 以下几行来验证并使用 netmon
监视请求using (HttpClient c = new HttpClient())
{
var response = c.GetAsync(url).Result;
}
我看到确实对于包含主机名 .net 的 url 发出 dns 请求,而对于以 ipAddress 作为主机名的请求则没有 dns 请求。