作者:@Jesse Ditson
原文:https://dev.to/jesseditson/cf-doh-look-up-dns-records-from-your-frontend-javascript-418k
背景
最近,Jesse Ditson 在开发 Archival Pro 时,遇到了需要检查域名 DNS 记录的需求。Archival Pro 允许用户将自定义域名指向 Archival 站点,为了启用这些站点的 HTTPS,他们使用基于 TXT 记录的域名验证器来验证所有权,然后再颁发 SSL 证书。为了简化这一过程,Jesse 需要查询 DNS 记录,以检查 CNAME 和 TXT 记录是否配置正确,并在配置不正确时显示一些有用的提示信息。
【活动】2024川渝Web 前端开发技术交流会「互联」,开始报名啦
要点
Jesse Ditson 开发了一个名为 cf-doh
的 JavaScript 库,该库允许在前端 JavaScript 中通过 DNS-over-HTTPS(DoH)查询 DNS 记录。这个库特别适用于在 Cloudflare Workers 等环境中运行,因为这些环境没有直接访问操作系统 DNS 系统的权限。
cf-doh:https://github.com/jesseditson/cf-doh
分析
在传统的 Node.js 或 C 语言环境中,查询 DNS 记录相对简单,因为操作系统提供了本地 DNS 缓存和查找工具。然而,在 Cloudflare Workers 中,由于运行环境是一个 v8 隔离环境,无法直接访问操作系统的 DNS 系统。即使启用了 nodejs_compat
,Node.js 的 DNS 库也只能返回一个空对象。
为了解决这个问题,Jesse 选择了使用 DNS-over-HTTPS(DoH),这是一种现代的 DNS 查询方式,通过 HTTPS 协议进行 DNS 查询,从而提高了安全性和隐私性。Cloudflare 提供了一个 DNS-over-HTTPS 的解决方案,但现有的 npm 库并不完全符合 Jesse 的需求。因此,他开发了 cf-doh
库,该库抽象了 DNS 查询服务器,并提供了类似于 Node.js DNS 库的 API。
cf-doh
库的主要特点包括:
简单易用:提供了类似于 Node.js DNS 库的 API,使得查询 DNS 记录变得非常简单。
类型安全:提供了完整的类型定义,确保在使用 TypeScript 时类型安全。
错误处理:将 HTTP 错误和状态响应转换为异常,简化了错误处理。
跨平台:支持在浏览器、Cloudflare Workers 以及 Node.js 环境中运行。
import { queryDNS } from "cf-doh";
const records = await queryDNS("_verification.jesseditson.com", "TXT");
records.forEach((r) => console.log(r));
影响
cf-doh
库的发布对前端开发者来说是一个重要的工具,特别是在需要在前端进行 DNS 查询的场景中。它不仅简化了 DNS 查询的过程,还提高了查询的安全性和隐私性。此外,该库的跨平台支持使得开发者可以在不同的环境中使用相同的 API,减少了开发和维护的复杂性。
结论
Jesse Ditson 开发的 cf-doh
库为前端开发者提供了一个强大且易用的工具,用于通过 DNS-over-HTTPS 查询 DNS 记录。随着越来越多的应用需要在前端进行 DNS 查询,cf-doh
库有望成为前端开发者的首选工具之一。未来,随着 DNS-over-HTTPS 的普及,类似的工具将会越来越受欢迎,而 cf-doh
库已经走在了前列。
AI 阅:了解技术资讯的一种方式。