قبلاً، برنامههای مبتنی بر وب برای استفاده از ویژگیهای پیشرفته DNS مانند DANE ، کشف سرویس DNS-SD یا حتی برای حل هر چیزی غیر از آدرسهای IP - مانند رکوردهای MX، به برنامههای افزودنی مرورگر نیاز داشتند. برای استفاده از ویژگیهای وابسته به DNSSEC مانند رکوردهای SSHFP ، هر یک از این پسوندها باید خودشان DNSSEC را تأیید کنند، زیرا ممکن است مرورگر یا سیستم عامل این کار را انجام ندهند.
از سال 2016، Google Public DNS یک API سازگار با وب برای DoH با اعتبارسنجی DNSSEC ارائه کرده است که نیازی به پیکربندی مرورگر یا سیستم عامل یا برنامههای افزودنی ندارد. پارامترهای ساده GET query و پاسخهای JSON به مشتریان اجازه میدهند تا نتایج را با استفاده از APIهای رایج وب تجزیه کنند و از جزئیات فرمت پیام DNS پیچیده مانند فشردهسازی اشارهگر برای نام دامنه اجتناب کنند.
برای اطلاعات کلی درباره DoH، مانند سرصفحههای HTTP، مدیریت تغییر مسیر، بهترین شیوههای حفظ حریم خصوصی، و کدهای وضعیت HTTP، به صفحه اسناد عمومی DoH مراجعه کنید.
صفحه Secure Transports دارای نمونههای خط فرمان curl
برای DoH و اطلاعات مشترک DoH و DNS از طریق TLS (DoT) است، مانند پشتیبانی TLS و برش DNS.
مشخصات JSON API
همه تماسهای API درخواستهای HTTP GET هستند. در مورد پارامترهای تکراری، فقط از مقدار اول استفاده می شود.
پارامترهای پشتیبانی شده
- نام
رشته، مورد نیاز
تنها پارامتر مورد نیاز بک اسلش RFC 4343 پذیرفته می شود.
- طول (پس از جایگزینی بک اسلش) باید بین 1 تا 253 باشد (در صورت وجود یک نقطه انتهایی اختیاری نادیده گرفته شود).
- تمام برچسب ها (بخش هایی از نام بین نقطه ها) باید 1 تا 63 بایت باشند.
- نامهای نامعتبر مانند
.example.com
،example..com
یا رشته خالی 400 Bad Request دریافت میکنند. - کاراکترهای غیر ASCII باید کدگذاری شوند (
xn--qxam
، نهελ
).
- نوع
رشته، پیش فرض:
1
نوع RR می تواند به عنوان یک عدد در [1، 65535] یا یک رشته متعارف (بدون حساس به حروف، مانند
A
یاaaaa
) نمایش داده شود. شما میتوانید255
برای درخواستهای 'ANY' استفاده کنید، اما توجه داشته باشید که این جایگزینی برای ارسال درخواستها برای هر دو رکورد A و AAAA یا MX نیست . سرورهای نام معتبر نیازی به بازگرداندن تمام رکوردها برای چنین درخواست هایی ندارند. برخی پاسخ نمی دهند و برخی دیگر (مانند cloudflare.com) فقط HINFO را برمی گردانند.- سی دی
بولی، پیش فرض:
false
پرچم CD (Checking Disabled) برای غیرفعال کردن اعتبارسنجی DNSSEC از
cd=1
یاcd=true
استفاده کنید. برای فعال کردن اعتبارسنجی DNSSEC از پارامترهایcd=0
،cd=false
یا بدونcd
استفاده کنید.- ct
رشته، پیش فرض: خالی
گزینه نوع محتوای مورد نظر از
ct=application/dns-message
برای دریافت پیام DNS باینری در متن پاسخ HTTP به جای متن JSON استفاده کنید. برای درخواست صریح متن JSON ازct=application/x-javascript
استفاده کنید. سایر مقادیر نوع محتوا نادیده گرفته می شوند و محتوای پیش فرض JSON برگردانده می شود.- انجام دهید
بولی، پیش فرض:
false
پرچم DO (DNSSEC OK). برای گنجاندن رکوردهای DNSSEC (RRSIG، NSEC، NSEC3) از
do=1
یاdo=true
استفاده کنید. برای حذف رکوردهای DNSSEC از پارامترdo=0
،do=false
یا nodo
استفاده کنید.برنامهها باید همیشه رکوردهای DNSSEC را در پاسخهای JSON کنترل کنند (و در صورت لزوم نادیده بگیرند، زیرا سایر پیادهسازیها ممکن است همیشه آنها را شامل شوند، و ممکن است رفتار پیشفرض پاسخهای JSON را در آینده تغییر دهیم. (پاسخ های پیام DNS باینری همیشه به ارزش پرچم DO احترام می گذارد.)
- edns_client_subnet
رشته، پیش فرض: خالی
گزینه edns0-client-subnet. فرمت یک آدرس IP با ماسک زیر شبکه است. مثالها:
1.2.3.4/24
،2001:700:300::/48
.اگر به دلیل نگرانی در مورد حفظ حریم خصوصی از DNS-over-HTTPS استفاده می کنید و نمی خواهید هیچ بخشی از آدرس IP شما برای دقت موقعیت جغرافیایی به سرورهای نام معتبر ارسال شود، از
edns_client_subnet=0.0.0.0/0
استفاده کنید. Google Public DNS معمولاً اطلاعات شبکه تقریبی را ارسال می کند (معمولاً آخرین قسمت آدرس IPv4 شما را صفر می کند).- random_padding
رشته، نادیده گرفته شد
مقدار این پارامتر نادیده گرفته می شود. مثال:
XmkMw~o_mgP2pf.gpw-Oi5dK
.کلاینت های API که نگران حملات احتمالی حریم خصوصی کانال جانبی با استفاده از اندازه بسته درخواست های HTTPS GET هستند، می توانند از این برای ایجاد همه درخواست ها دقیقاً به اندازه یکسان با اضافه کردن درخواست ها با داده های تصادفی استفاده کنند. برای جلوگیری از تفسیر نادرست URL، کاراکترهای padding را به کاراکترهای URL رزرو نشده محدود کنید: حروف بزرگ و کوچک، اعداد، خط فاصله، نقطه، زیرخط و tilde.
پاسخ DNS در JSON
یک پاسخ موفق (نظرات اضافه شده در اینجا در پاسخ های واقعی وجود ندارد):
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "apple.com.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Answer":
[
{
"name": "apple.com.", // Always matches name in the Question section
"type": 1, // A - Standard DNS RR type
"TTL": 3599, // Record's time-to-live in seconds
"data": "17.178.96.59" // Data for A - IP address as text
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.172.224.47"
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.142.160.59"
}
],
"edns_client_subnet": "12.34.56.78/0" // IP address / scope prefix-length
}
RFC 7871 (زیر شبکه مشتری EDNS) را برای جزئیات بیشتر در مورد "طول پیشوند دامنه" و نحوه تأثیر آن بر حافظه پنهان رجوع کنید.
پاسخ شکست با اطلاعات تشخیصی:
{
"Status": 2, // SERVFAIL - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "dnssec-failed.org.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}
رکوردهای SPF و TXT با نقل قول های جاسازی شده و انتساب سرور نام:
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "*.dns-example.info.", // FQDN with trailing dot
"type": 99 // SPF - Standard DNS RR type
}
],
"Answer": [
{
"name": "*.dns-example.info.", // Always matches name in Question
"type": 99, // SPF - Standard DNS RR type
"TTL": 21599, // Record's time-to-live in seconds
"data": "\"v=spf1 -all\"" // Data for SPF - quoted string
}
],
"Comment": "Response from 216.239.38.110"
// Uncached responses are attributed to the authoritative name server
}
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
"type": 16 // TXT - Standard DNS RR type
}
],
"Answer": [
{
"name": "s1024._domainkey.yahoo.com.", // Always matches Question name
"type": 16, // TXT - Standard DNS RR type
"data": "\"k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
// Data for TXT - multiple quoted strings
}
],
}
رشته های DNS
همه رکوردهای TXT به عنوان یک رشته JSON کدگذاری می شوند که از فرمت های ضبط طولانی تر TXT مانند RFC 4408 (SPF) یا RFC 4871 (DKIM) استفاده می کند.
EDNS
مکانیسم عمومی گسترش EDNS پشتیبانی نمی شود. گزینه EDNS Client Subnet (edns-client-subnet) یک پارامتر در درخواست GET و یک فیلد سطح بالا در پاسخ JSON است.