最近、アーカイブに取り組んでいるときに、ドメインの DNS レコードを確認する必要があることに気づきました。
Archival Pro を使用すると、ユーザーはアーカイブ サイトでカスタム ドメインを指定できます。これらのサイトで https を有効にするために、SSL を発行する前に TXT レコード ベースのドメイン検証ツールを使用して所有権を検証します。このプロセスを簡素化するには、レコードをクエリして CNAME レコードと TXT レコードが正しく構成されているかどうかを確認し、構成されていない場合は役立つメッセージを表示する必要がありました。
node.js または C のような環境では、各 OS にローカル DNS キャッシュとルックアップ ツールがあるため、これは非常に簡単です。ただし、これをcloudflareワーカーで実行していましたが、これは実際にはv8アイソレートであるため、OSのDNSシステムにアクセスできません。実際、nodejs_compat がオンになっている場合でも、ノードの stdlib の DNS ライブラリは空のオブジェクトを返すだけです。
少し調べた結果、最新の DNS-over-HTTPS がこの問題に適しており、私の狭いケース以外にも用途があることがわかりました。ただし、このユースケースでは、npm のライブラリはどれも気に入りませんでした。私が欲しかったのは、ルックアップ サーバーを抽象化する、ノードの DNS ライブラリに似たものでした。
Cloudflare は、DNS-over-HTTPs ソリューションを提供しています。これについては、https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/
で参照できます。この API の主な欠点は、平均的なユーザーにとっては少々不透明である可能性があることです。ステータス コードは仕様にマッピングされた数値として返され、応答形式は質問と回答形式であり、次のような詳細なデータが含まれます。便利ではありますが、カジュアルな使用には過剰です。
私自身や他の人にとってこれを簡単にするために、cf-doh を公開しました。
これは、ブラウザ、cloudflare ワーカー、または JavaScript が実行されるその他の場所からのレコードのクエリを非常に簡単にするシンプルなライブラリです。これはネイティブのフェッチ実装に依存しており、まだ持っていない場合は設定できるため、必要に応じてポリフィルされた whatwg フェッチ実装をノード内で実行することもできます。ただし、ノード内にいる場合は、おそらくあなたが望むものであるnode:dnsがあります。
このライブラリは、フェッチ呼び出しのラップに加えて、仕様全体の完全な型を提供し、引用符で囲まれた文字列応答を処理し、http エラーとステータス応答を例外に変換します。
使い方は簡単です:
import { queryDNS } from "cf-doh"; const records = await queryDNS("_verification.jesseditson.com", "TXT"); records.forEach((r) => console.log(r));
型付きの値を使用したい場合は、有効なレコード タイプをすべてインポートして、文字列の代わりに使用することもできます。
import { queryDNS, DNSRecordType } from "cf-doh"; const records = await queryDNS("_verification.jesseditson.com", DNSRecordType.TXT);
NoError 以外のステータスを処理したい場合は、代わりに下位レベルの API を使用できます。
import { queryDNSRecords, DNSRecordType, DOHStatus, DOHStatusMessage } from "cf-doh"; const response = await queryDNSRecords("_verification.jesseditson.com", DNSRecordType.TXT); switch (response.status) { case DOHStatus.NoError: console.log("This record exists!"); break; case DOHStatus.NXDomain: console.log("Domain wasn't found"); break; default: console.log(DOHStatusMessage[response.status]); break; }
これをプロジェクトに追加するには、npm install --save cf-doh を実行するだけです。ソースまたは完全な API サーフェスに興味がある場合は、リポジトリをチェックしてください:
https://github.com/jesseditson/cf-doh
以上がcf-doh: フロントエンド JavaScript から DNS レコードを検索しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。