DNS-over-HTTP (DoH) 是一种加密和私密的 DNS 名称查找方式,其可通过 HTTP/2 或 HTTPS 协议来实现。npm 包 dns-over-http(简称 doh)是一个简单易用的 DoH 客户端,它使得客户端可以无需脱离 HTTP 或 HTTPS 协议栈就能够请求 DNS 的 Name Server,也支持 DNS over TLS 和 DNS over HTTPS 协议。
在前端开发中,在 WebView 内的网络请求是无法使用原生方式来请求 DNS 的,而 dns-over-http 正是为了解决这个问题而开发的,它提供了一种简单、快捷以及可扩展的方式,帮助开发人员实现高效的 DNS 请求。
安装
通过 npm 安装 dns-over-http:
npm install dns-over-http
使用方法
在使用 doh 进行 DNS 查询前,需要确定所用到的 DNS 服务器。以下是一些示例 DNS 服务器:
- IPv4:
8.8.8.8
- IPv6:
2001:4860:4860::8888
OpenDNS
- IPv4:
208.67.222.222
- IPv6:
2620:0:ccc::2
Cloudflare
- IPv4:
1.1.1.1
- IPv6:
2606:4700:4700::1111
下面是一个示例,以 Google DNS 为例:
-- -------------------- ---- ------- ----- -------------- - ------------------------- ----- --- - --- ------------------ --------------------------------- ------------------------- ---- ------------ -- - -------------------- -------------- -- - ------------------- ---
在这段代码中,我们首先实例化了 DnsOverHttps,然后使用 resolve 方法进行 DNS 查询,该方法接收三个参数:域名,记录类型和选项。查询结果以一个包含所有符合查询要求的 IP 地址的数组返回。
深入了解
除了上述示例之外,doh 还提供了以下可选项:
url
指定 DoH 服务端提供 DNS 的 URL,该项为必须项。
示例:
const dns = new DnsOverHttps({url: "https://dns.google/dns-query"});
headers
可选项。有时候 DoH 服务可能要求客户端向请求中添加特定请求头。你可以通过此选项添加这些额外的请求头。
示例:
const dns = new DnsOverHttps({ url: "https://dns.google/dns-query", headers: { "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8", "Cache-Control": "no-cache" } });
timeout
可选项。指定查询超时时间,以毫秒为单位。默认值为 30 秒。
示例:
const dns = new DnsOverHttps({url: "https://dns.google/dns-query", timeout: 5000});
method
可选项。DoH 服务器通常支持 GET 和 POST 两种 HTTP 方法。该选项指定所用的方法。默认值为 GET。
示例:
const dns = new DnsOverHttps({url: "https://dns.google/dns-query", method: "POST"});
padding
可选项。DoH 使用了加密保护,因此数据包的大小会随机变化,为了防止 DoS 攻击,可能需要加入 padding,增加数据包大小。默认值为 128。
示例:
const dns = new DnsOverHttps({url: "https://dns.google/dns-query", padding: 512});
enctype
可选项。指定加密类型。默认采用 application/dns-udpwireformat。
示例:
const dns = new DnsOverHttps({url: "https://dns.google/dns-query", enctype: "application/dns-json"});
结束语
本文介绍了 npm 包 dns-over-http 的使用方法与深入了解内容,包括了 doh 的一些基本选项,希望您能从中受益,加快开发效率,实现更好的网络请求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/dns-over-http