DNS Wireformat
Cloudflareは、RFC 1035 ↗で定義されたDNSワイヤフォーマットを尊重します。
DNSワイヤフォーマットを使用してクエリを送信するには、ヘッダーaccept: application/dns-messageを設定するか、POSTを使用する場合はcontent-type: application/dns-messageを設定して、クエリのメディアタイプを示します。
DNSワイヤフォーマットを使用したクエリは、POSTまたはGETを使用して送信できます。
POSTを使用してリクエストを行う場合、DNSクエリはHTTPリクエストのメッセージボディに含まれ、MIMEタイプ(以下参照)はContent-Typeリクエストヘッダーに含まれます。Cloudflareは、クライアントによって送信されたHTTPリクエストのメッセージボディを使用するため、メッセージボディはエンコードしないでください。
以下はリクエストの例です。www.example.comに対する同じDNSクエリをPOSTメソッドで行うと、次のようになります。
:method = POST:scheme = https:authority = cloudflare-dns.com:path = /dns-queryaccept = application/dns-messagecontent-type = application/dns-messagecontent-length = 33
<33バイトは以下の16進エンコーディングで表されます>00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 7707 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 0001そして、ワイヤフォーマットでの回答が返されます。
:status = 200content-type = application/dns-messagecontent-length = 64cache-control = max-age=128
<64バイトは以下の16進エンコーディングで表されます>00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 7707 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 0001 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f6d 00 00 01 00 01 00 00 00 80 00 04 C0 00 02 01これをcURLを使用して試すには、次のように書きます。
echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 --decode | curl --header 'content-type: application/dns-message' --data-binary @- https://cloudflare-dns.com/dns-query --output - | hexdumpGETを使用してリクエストを行う場合、DNSクエリはURLにエンコードされます。acceptヘッダーを使用してMIMEタイプを示すことができます(デフォルト: application/dns-message)。
リクエストの例:
curl --header 'accept: application/dns-message' --verbose 'https://cloudflare-dns.com/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | hexdump* HTTP2を使用中、サーバーはマルチユースをサポート* 接続状態が変更されました(HTTP/2が確認されました)* アップグレード後、HTTP/2データをストリームバッファから接続バッファにコピー中: len=0* ストリームIDを使用: 1 (easy handle 0x7f968700a400)GET /dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2Host: cloudflare-dns.comUser-Agent: curl/7.54.0accept: application/dns-message
* 接続状態が変更されました(MAX_CONCURRENT_STREAMSが更新されました)!HTTP/2 200date: Fri, 23 Mar 2018 05:14:02 GMTcontent-type: application/dns-messagecontent-length: 49cache-control: max-age=0set-cookie: \__cfduid=dd1fb65f0185fadf50bbb6cd14ecbc5b01521782042; expires=Sat, 23-Mar-19 05:14:02 GMT; path=/; domain=.cloudflare.com; HttpOnlyserver: cloudflare-nginxcf-ray: 3ffe69838a418c4c-SFO-DOG
{ [49バイトのデータ]100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494* 接続#0がcloudflare-dns.comホストに残りました0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 770000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 000000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d80000030 220000031